Qiskit Migration Recipes

This page provides focused “before → after” migration recipes for running Qiskit-style code on Quantum Rings backends.

Prerequisites

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.