Skip to main content

Tutorial: Calibration Flow

Use GlassBox™ to inspect device calibration, verify qubit health, and produce evidence bundles for compliance.

Time: 15 minutes · Prerequisites: API key configured


Step 1 — Check Available Devices

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';

from softqcos_sdk import QCOSClient

client = QCOSClient()

devices = client.calibration.devices()
for d in devices:
print(f"{d['device_name']:20s} | {d['num_qubits']} qubits | Last calibrated: {d['last_calibrated']}")
softqcos calibration devices

Step 2 — Inspect Device State

state = client.calibration.device_state("ibm_brisbane")
print(f"Device: {state['device_name']}")
print(f"Status: {state['status']}")
print(f"Average T1: {state['avg_t1']:.1f} μs")
print(f"Average T2: {state['avg_t2']:.1f} μs")
print(f"Average readout error: {state['avg_readout_error']:.4f}")
print(f"Average gate error: {state['avg_gate_error']:.6f}")
softqcos calibration state ibm_brisbane

Step 3 — Check Individual Qubits

# Check specific qubit
qubit = client.calibration.qubit("ibm_brisbane", 0)
print(f"Qubit 0:")
print(f" T1: {qubit['t1']:.1f} μs")
print(f" T2: {qubit['t2']:.1f} μs")
print(f" Readout error: {qubit['readout_error']:.4f}")
print(f" Gate error (sx): {qubit['gate_errors']['sx']:.6f}")

# Find best qubits for your experiment
for i in range(5):
q = client.calibration.qubit("ibm_brisbane", i)
quality = "✓" if q["readout_error"] < 0.02 else "✗"
print(f" Qubit {i}: T1={q['t1']:.0f}μs, error={q['readout_error']:.4f} {quality}")
softqcos calibration qubit ibm_brisbane 0

Step 4 — Calibration-Aware Compilation

Compile your circuit taking current calibration data into account:

qasm = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2]; creg c[2];
h q[0]; cx q[0], q[1];
measure q -> c;
"""

compilation = client.calibration.compile(qasm, device="ibm_brisbane")
print(f"Compilation ID: {compilation['compilation_id']}")
print(f"Status: {compilation['status']}")
print(f"Original depth: {compilation['original_depth']}")
print(f"Optimized depth: {compilation['optimized_depth']}")
print(f"Mapped qubits: {compilation['qubit_mapping']}")
softqcos calibration compile bell.qasm --device ibm_brisbane

Step 5 — Create an Evidence Bundle

Create tamper-proof calibration evidence for compliance:

# Create evidence
evidence = client.calibration.evidence_create(device_name="ibm_brisbane")
bundle_id = evidence["bundle_id"]
print(f"Bundle ID: {bundle_id}")

# Sign and finalize
client.calibration.evidence_sign(bundle_id)
client.calibration.evidence_finalize(bundle_id)
print("Evidence finalized ✓")
softqcos calibration evidence create ibm_brisbane
softqcos calibration evidence sign <bundle_id>
softqcos calibration evidence finalize <bundle_id>

Step 6 — Verify Evidence

verification = client.calibration.evidence_verify(bundle_id=bundle_id)
print(f"Valid: {verification['valid']}")
print(f"Hash: {verification['hash']}")
softqcos calibration evidence verify <bundle_id>

Step 7 — Full Audit Trail

audit = client.calibration.evidence_audit(bundle_id)
print(f"Created: {audit['created_at']}")
print(f"Signed: {audit['signed_at']}")
print(f"Finalized: {audit['finalized_at']}")
print(f"Events: {len(audit['events'])}")
for event in audit["events"]:
print(f" [{event['timestamp']}] {event['action']}: {event['detail']}")
softqcos calibration evidence audit <bundle_id>

What's Next?