Qiskit Migration Recipes¶
This page provides focused “before → after” migration recipes for running Qiskit-style code on Quantum Rings backends.
Prerequisites¶
Credentials configured: Quantum Rings credentials
Qiskit toolkit installed and working: Toolkit for Qiskit
Recipe 1 — Bell state: local simulator → Quantum Rings backend¶
Goal: start with a standard Bell-state circuit and move execution from a local simulator to a Quantum Rings backend with minimal changes.
A) Typical local execution (example)¶
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit import transpile
# Bell circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sim = AerSimulator()
tqc = transpile(qc, sim)
result = sim.run(tqc, shots=1000).result()
print(result.get_counts())
B) Execute the same circuit on Quantum Rings¶
Key changes:
Acquire a Quantum Rings backend (via
QrRuntimeService)Replace the local simulator run with
backend.run(...)
from qiskit import QuantumCircuit
from quantumrings.toolkit.qiskit import QrRuntimeService
# Bell circuit (same as before)
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Acquire a Quantum Rings backend
# Tip: avoid hard-coding credentials in code; prefer saved credentials (see start/credentials).
service = QrRuntimeService(token="<YOUR_TOKEN_HERE>", name="<YOUR_ACCOUNT_NAME_HERE>")
backend = service.backend(name="scarlet_quantum_rings", num_qubits=qc.num_qubits)
# Execute on Quantum Rings
job = backend.run(qc, shots=1000)
result = job.result()
print(result.get_counts())
Note
Choose the backend name appropriate for your installation and workload. See Backends.
Recipe 2 — Replace Qiskit primitives with Quantum Rings primitives¶
Many Qiskit ecosystem workflows use primitives (Sampler / Estimator). The Quantum Rings toolkit provides compatible primitives that run on Quantum Rings backends.
Sampler V2 recipe (bitstring sampling)¶
This recipe shows how to run a circuit using QrSamplerV2.
from qiskit import QuantumCircuit
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from quantumrings.toolkit.qiskit import QrRuntimeService
from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler
# Acquire backend
service = QrRuntimeService(token="<YOUR_TOKEN_HERE>", name="<YOUR_ACCOUNT_NAME_HERE>")
backend = service.backend(name="scarlet_quantum_rings", precision="single", gpu=0, num_qubits=2)
# Circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
# Transpile to the backend ISA
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
# Run with Sampler V2
sampler = Sampler(backend=backend)
job = sampler.run([isa_circuit])
result = job.result()
pub_result = result[0]
print(pub_result.data.meas.get_bitstrings()[:10])
Note
The toolkit documentation recommends using V2 primitives. If you need quasi-distributions, be aware that the V2 sampler does not provide quasi-distribution outputs directly.
Estimator V2 recipe (expectation values)¶
This recipe shows how to compute expectation values for an observable using QrEstimatorV2.
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from quantumrings.toolkit.qiskit import QrRuntimeService
from quantumrings.toolkit.qiskit import QrEstimatorV2 as Estimator
# Acquire backend
service = QrRuntimeService(token="<YOUR_TOKEN_HERE>", name="<YOUR_ACCOUNT_NAME_HERE>")
backend = service.backend(name="scarlet_quantum_rings", precision="double", gpu=0, num_qubits=2)
# Observable
op = SparsePauliOp.from_list(
[
("II", -1.052373245772859),
("IZ", 0.39793742484318045),
("ZI", -0.39793742484318045),
("ZZ", -0.01128010425623538),
("XX", 0.18093119978423156),
]
)
# State preparation
circuit = QuantumCircuit(2)
circuit.x(0)
circuit.x(1)
# Transpile + align observable to layout
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
isa_observable = op.apply_layout(isa_circuit.layout)
estimator = Estimator(backend=backend)
job = estimator.run([(isa_circuit, isa_observable)])
pub_result = job.result()[0]
print(f"Expectation value: {pub_result.data.evs[0]}")
Return to Qiskit Toolkit Examples.