Backend¶
The backend system defines the contract that all quantum execution backends must implement.
Architecture¶
Backend (ABC)
├── LocalSimulator — Pure NumPy, built-in, no dependencies
├── AerBackend — Qiskit Aer, high-performance simulator
├── IBMBackend — IBM Quantum real hardware
├── IonQBackend — IonQ trapped-ion processors (v0.2)
└── CustomBackend — Your own backend
Core Interfaces¶
Backend ABC¶
Backend
¶
Bases: ABC
Abstract base class for all quantum backends.
Every backend adapter (IBM Quantum, IonQ, GPU simulator, etc.) must implement this interface to integrate with QuantSDK.
Example::
class MyBackend(Backend):
def run(self, circuit, shots=1024):
# Submit circuit and return result
...
Attributes¶
Functions¶
run
abstractmethod
¶
Execute a quantum circuit on this backend.
| PARAMETER | DESCRIPTION |
|---|---|
circuit
|
The QuantSDK circuit to execute.
TYPE:
|
shots
|
Number of measurement repetitions.
TYPE:
|
**options
|
Backend-specific execution options.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Result
|
Result object containing measurement outcomes. |
info
abstractmethod
¶
info() -> BackendInfo
Get information about this backend.
| RETURNS | DESCRIPTION |
|---|---|
BackendInfo
|
BackendInfo with metadata about capabilities and status. |
BackendInfo¶
BackendInfo
dataclass
¶
BackendInfo(
name: str,
provider: str,
num_qubits: int,
status: BackendStatus = ONLINE,
is_simulator: bool = False,
native_gates: frozenset[str] = frozenset(),
max_shots: int = 100000,
queue_depth: int = 0,
metadata: dict[str, Any] = dict(),
)
Metadata about a quantum backend.
| ATTRIBUTE | DESCRIPTION |
|---|---|
name |
Unique backend identifier.
TYPE:
|
provider |
Provider name (e.g., "ibm", "ionq", "simulator").
TYPE:
|
num_qubits |
Number of available qubits.
TYPE:
|
status |
Current operational status.
TYPE:
|
is_simulator |
Whether this is a simulator (vs real hardware).
TYPE:
|
native_gates |
Set of natively supported gate names.
TYPE:
|
max_shots |
Maximum number of shots per job.
TYPE:
|
queue_depth |
Number of jobs currently queued.
TYPE:
|
metadata |
Additional backend-specific metadata.
TYPE:
|
BackendStatus¶
BackendStatus
¶
Bases: Enum
Status of a quantum backend.
Local Simulator¶
The built-in simulator uses pure NumPy tensor contraction. No external dependencies required.
LocalSimulator
¶
Bases: Backend
A local statevector simulator for quantum circuits.
Simulates quantum circuits by computing the full statevector and sampling measurement outcomes. No external dependencies beyond NumPy.
Supports up to ~20 qubits on a typical machine (2^20 = 1M amplitudes).
Example::
from quantsdk.simulators.local import LocalSimulator
sim = LocalSimulator()
result = sim.run(circuit, shots=1000)
print(result.counts)
Functions¶
run
¶
Execute a circuit on the local simulator.
| PARAMETER | DESCRIPTION |
|---|---|
circuit
|
The quantum circuit to simulate.
TYPE:
|
shots
|
Number of measurement samples.
TYPE:
|
**options
|
seed (int): Random seed for reproducibility.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Result
|
Result with measurement counts. |
| RAISES | DESCRIPTION |
|---|---|
ValueError
|
If circuit exceeds MAX_QUBITS. |
Usage¶
import quantsdk as qs
# Via qs.run() (recommended)
result = qs.run(circuit, shots=1000)
# Or directly
from quantsdk.simulators.local import LocalSimulator
sim = LocalSimulator()
info = sim.info()
print(f"Max qubits: {info.num_qubits}") # 24
result = sim.run(circuit, shots=1000, seed=42)
Limitations¶
- Maximum 24 qubits (memory constraint)
- No noise modeling (use Aer for noise simulation)
- CPU only (use GPU backend for large circuits)
IBM Backends¶
Requires pip install quantsdk[ibm].
IBMBackend
¶
IBMBackend(
token: str | None = None,
instance: str = "ibm-q/open/main",
backend_name: str | None = None,
channel: str = "ibm_quantum_platform",
)
Bases: Backend
Run circuits on IBM Quantum hardware via qiskit-ibm-runtime.
This adapter converts QuantSDK circuits to Qiskit format, submits them to IBM Quantum via the Sampler primitive, and converts results back.
| PARAMETER | DESCRIPTION |
|---|---|
token
|
IBM Quantum API token. If None, uses saved credentials.
TYPE:
|
instance
|
IBM Quantum instance (e.g., "ibm-q/open/main").
TYPE:
|
backend_name
|
Specific backend to target (e.g., "ibm_brisbane"). If None, the least-busy backend is selected automatically.
TYPE:
|
channel
|
Channel type — "ibm_quantum" or "ibm_cloud".
TYPE:
|
Example::
from quantsdk.backends.ibm import IBMBackend
import quantsdk as qs
backend = IBMBackend(token="YOUR_TOKEN")
circuit = qs.Circuit(2).h(0).cx(0, 1).measure_all()
result = backend.run(circuit, shots=4096)
print(result.summary())
Functions¶
run
¶
Execute a circuit on IBM Quantum hardware.
Uses the Sampler V2 primitive for execution. The circuit is automatically transpiled by IBM's runtime.
| PARAMETER | DESCRIPTION |
|---|---|
circuit
|
QuantSDK circuit to run.
TYPE:
|
shots
|
Number of measurement shots (default 4096).
TYPE:
|
**options
|
Additional options passed to the Sampler.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Result
|
QuantSDK Result with measurement counts. |
available_backends
¶
available_backends(
simulator: bool = False,
) -> list[BackendInfo]
List available IBM Quantum backends.
| PARAMETER | DESCRIPTION |
|---|---|
simulator
|
If True, include simulators. Default False.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
list[BackendInfo]
|
List of BackendInfo for available backends. |
AerBackend
¶
Bases: Backend
Run circuits on the local Qiskit Aer simulator.
This is useful for testing and development without an IBM token. Uses the Aer statevector/QASM simulator locally.
| PARAMETER | DESCRIPTION |
|---|---|
method
|
Simulation method — "automatic", "statevector", "density_matrix", "stabilizer", etc. Default "automatic".
TYPE:
|
Example::
from quantsdk.backends.ibm import AerBackend
import quantsdk as qs
backend = AerBackend()
circuit = qs.Circuit(3).h(0).cx(0, 1).cx(1, 2).measure_all()
result = backend.run(circuit, shots=10000)
print(result.counts)
Functions¶
run
¶
Execute a circuit on the local Aer simulator.
| PARAMETER | DESCRIPTION |
|---|---|
circuit
|
QuantSDK circuit to run.
TYPE:
|
shots
|
Number of shots (default 1024).
TYPE:
|
**options
|
Additional Aer options (seed_simulator, etc.).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Result
|
QuantSDK Result with measurement counts. |