IBM Quantum and Amazon Braket Interfaces

The Ket quantum programming platform provides seamless integration with industry-leading quantum cloud providers. By using the IBMDevice and AmazonBraket classes, you can execute Ket quantum circuits on Quantum Processing Units (QPUs) or simulators provided by IBM Quantum and Amazon Web Services (AWS).

Important

Execution Model

  • Supported Operations: Execution on these backends is currently limited to sample and exp_value.

  • Batch Mode: Execution is strictly batch-based. Quantum instructions are collected and submitted as a single job to the backend, rather than executed interactively.

Prerequisites

Before using these integrations, install the required dependencies.

IBM Quantum:

pip install ket-lang[ibm]

Amazon Braket:

pip install ket-lang[amazon]

IBM Quantum Interface (IBMDevice)

The IBMDevice class provides integration with the Qiskit ecosystem.

Account setup:

Basic Usage: Bell State (Local Simulator)

from ket import *
from ket.ibm import IBMDevice
from math import sqrt

device = IBMDevice()
process = Process(device)

a, b = process.alloc(2)

X(a + b)
CNOT(H(a), b)

with obs():
    a0 = Z(a)
    a1 = X(a)
    b0 = -(X(b) + Z(b)) / sqrt(2)
    b1 = (X(b) - Z(b)) / sqrt(2)
    h = a0 * b0 + a0 * b1 + a1 * b0 - a1 * b1

print(exp_value(h).get())

Advanced Usage: Noisy Local Simulation

You can provide a custom Qiskit backend to IBMDevice to emulate realistic hardware noise.

from ket import *
from ket.ibm import IBMDevice
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime.fake_provider import FakeBrisbane

backend = FakeBrisbane()
simulator = AerSimulator.from_backend(backend)

device = IBMDevice(simulator)
process = Process(device)

# Continue building your circuit...

Amazon Braket Interface (AmazonBraket)

The AmazonBraket class connects Ket to AWS Braket, allowing execution on local simulators, managed cloud simulators, and QPUs.

Cloud setup:

To use AWS resources, configure your AWS account with the required permissions.

Targeting AWS Resources

If no ARN is provided, AmazonBraket defaults to a local simulator. To target specific backends, provide the device ARN.

from ket import *
from ket.amazon import AmazonBraket
from math import sqrt

# Local simulator (default)
device = AmazonBraket()

# Cloud simulators
# device = AmazonBraket('arn:aws:braket:::device/quantum-simulator/amazon/tn1')
# device = AmazonBraket('arn:aws:braket:::device/quantum-simulator/amazon/dm1')

# Real QPUs
# device = AmazonBraket('arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1')
# device = AmazonBraket('arn:aws:braket:us-east-1::device/qpu/ionq/Forte-1')
# device = AmazonBraket('arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet')
# device = AmazonBraket('arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3')

process = Process(device)
a, b = process.alloc(2)

X(a + b)
CNOT(H(a), b)

with obs():
    a0 = Z(a)
    a1 = X(a)
    b0 = -(X(b) + Z(b)) / sqrt(2)
    b1 = (X(b) - Z(b)) / sqrt(2)
    h = a0 * b0 + a0 * b1 + a1 * b0 - a1 * b1

print(exp_value(h).get())