What is PennyLane?

PennyLane is an open-source Python library designed for quantum machine learning (QML). It facilitates the creation, simulation, and optimization of quantum circuits, enabling seamless integration with classical machine learning frameworks such as TensorFlow and PyTorch. One of PennyLane’s key features is its ability to compute gradients of quantum circuits, a critical component for quantum machine learning models. PennyLane supports various quantum computing platforms, including IonQ, through its plugin system.

IonQ’s PennyLane plugin allows users to leverage IonQ’s powerful trapped-ion quantum systems and high-performance cloud simulator directly within PennyLane, making it simpler to integrate quantum computing into your machine learning projects.

Before you begin

Ensure you have an account on the IonQ Quantum Cloud, and generate an API key for authentication. If you need assistance with this, there’s a helpful guide on setting up and managing your API keys.

You should also have Python 3.11 installed on your computer.

To check your Python version, run python --version in your terminal.

Setting up PennyLane and the IonQ plugin

Install PennyLane and the IonQ plugin using pip:

pip install pennylane pennylane-ionq

Note: It’s recommended to perform this installation within a virtual environment using tools like virtualenv or conda to manage your Python packages cleanly.

Configuring your environment

PennyLane will use the IONQ_API_KEY environment variable by default. Visit the IonQ Cloud to obtain an API key. Then set this variable in your shell or terminal:

export IONQ_API_KEY="your_api_key_here"

Alternatively, you can specify your API key programmatically when creating a device in PennyLane.

Writing a quantum circuit

Create a Python script or a Jupyter notebook and import PennyLane. Define a quantum device that targets IonQ’s simulator (or a quantum processing unit, QPU, if you have access):

import pennylane as qml

# Setup the device
dev = qml.device(

Define a simple quantum circuit as a function decorated with @qml.qnode that targets your device:

def bell_state():
    qml.CNOT(wires=[0, 1])
    return qml.probs(wires=[0, 1])

Execute the circuit and print the results:


This code snippet creates a Bell state and measures the probabilities of the quantum state being in each basis state.

Running your circuit

Execute your script or Jupyter notebook cell. You should receive an output similar to:

[0.5 0.  0.  0.5]

This output represents the probabilities of measuring the quantum state in the 00, 01, 10, and 11 states, showing that our Bell state preparation was successful.

Viewing job results

You can view the results and status of your quantum jobs on the IonQ Quantum Cloud dashboard, under the “My Jobs” section.

Expanding your knowledge

Congratulations on running your first quantum circuit with PennyLane and IonQ! To deepen your understanding: