PennyLane
Overview
PennyLane is a quantum computing library that enables training quantum computers like neural networks. It provides automatic differentiation of quantum circuits, device-independent programming, and seamless integration with classical machine learning frameworks.
Installation
Install using uv:
uv pip install pennylane
For quantum hardware access, install device plugins:
# IBM Quantum
uv pip install pennylane-qiskit
# Amazon Braket
uv pip install amazon-braket-pennylane-plugin
# Google Cirq
uv pip install pennylane-cirq
# Rigetti Forest
uv pip install pennylane-rigetti
# IonQ
uv pip install pennylane-ionq
Quick Start
Build a quantum circuit and optimize its parameters:
import pennylane as qml
from pennylane import numpy as np
# Create device
dev = qml.device('default.qubit', wires=2)
# Define quantum circuit
@qml.qnode(dev)
def circuit(params):
qml.RX(params[0], wires=0)
qml.RY(params[1], wires=1)
qml.CNOT(wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Optimize parameters
opt = qml.GradientDescentOptimizer(stepsize=0.1)
params = np.array([0.1, 0.2], requires_grad=True)
for i in range(100):
params = opt.step(circuit, params)
Core Capabilities
1. Quantum Circuit Construction
Build circuits with gates, measurements, and state preparation. See references/quantum_circuits.md for:
- Single and multi-qubit gates
- Controlled operations and conditional logic
- Mid-circuit measurements and adaptive circuits
- Various measurement types (expectation, probability, samples)
- Circuit inspection and debugging
2. Quantum Machine Learning
Create hybrid quantum-classical models. See references/quantum_ml.md for:
- Integration with PyTorch, JAX, TensorFlow
- Quantum neural networks and variational classifiers
- Data encoding strategies (angle, amplitude, basis, IQP)
- Training hybrid models with backpropagation
- Transfer learning with quantum circuits
3. Quantum Chemistry
Simulate molecules and compute ground state energies. See references/quantum_chemistry.md for:
- Molecular Hamiltonian generation
- Variational Quantum Eigensolver (VQE)
- UCCSD ansatz for chemistry
- Geometry optimization and dissociation curves
- Molecular property calculations
4. Device Management
Execute on simulators or quantum hardware. See references/devices_backends.md for:
- Built-in simulators (default.qubit, lightning.qubit, default.mixed)
- Hardware plugins (IBM, Amazon Braket, Google, Rigetti, IonQ)
- Device selection and configuration
- Performance optimization and caching
- GPU acceleration and JIT compilation
5. Optimization
Train quantum circuits with various optimizers. See references/optimization.md for:
- Built-in optimizers (Adam, gradient descent, momentum, RMSProp)
- Gradient computation methods (backprop, parameter-shift, adjoint)
- Variational algorithms (VQE, QAOA)
- Training strategies (learning rate schedules, mini-batches)
- Handling barren plateaus and local minima
6. Advanced Features
Leverage templates, transforms, and compilation. See references/advanced_features.md for:
- Circuit templates and layers
- Transforms and circuit optimization
- Pulse-level programming
- Catalyst JIT compilation
- Noise models and error mitigation
- Resource estimation
Common Workflows
Train a Variational Classifier
# 1. Define ansatz
@qml.qnode(dev)
def classifier(x, weights):
# Encode data
qml.AngleEmbedding(x, wires=range(4))
# Variational layers
qml.StronglyEntanglingLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
# 2. Train
opt = qml.AdamOptimizer(stepsize=0.01)
weights = np.random.random((3, 4, 3)) # 3 layers, 4 wires
for epoch in range(100):
for x, y in zip(X_train, y_train):
weights = opt.step(lambda w: (classifier(x, w) - y)**2, weights)
Run VQE for Molecular Ground State
from pennylane import qchem
# 1. Build Hamiltonian
symbols = ['H', 'H']
coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74])
H, n_qubits = qchem.molecular_hamiltonian(symbols, coords)
# 2. Define ansatz
@qml.qnode(dev)
def vqe_circuit(params):
qml.BasisState(qchem.hf_state(2, n_qubits), wires=range(n_qubits))
qml.UCCSD(params, wires=range(n_qubits))
return qml.expval(H)
# 3. Optimize
opt = qml.AdamOptimizer(stepsize=0.1)
params = np.zeros(10, requires_grad=True)
for i in range(100):
params, energy = opt.step_and_cost(vqe_circuit, params)
print(f"Step {i}: Energy = {energy:.6f} Ha")
Switch Between Devices
# Same circuit, different backends
circuit_def = lambda dev: qml.qnode(dev)(circuit_function)
# Test on simulator
dev_sim = qml.device('default.qubit', wires=4)
result_sim = circuit_def(dev_sim)(params)
# Run on quantum hardware
dev_hw = qml.device('qiskit.ibmq', wires=4, backend='ibmq_manila')
result_hw = circuit_def(dev_hw)(params)
Detailed Documentation
For comprehensive coverage of specific topics, consult the reference files:
- Getting started:
references/getting_started.md - Installation, basic concepts, first steps
- Quantum circuits:
references/quantum_circuits.md - Gates, measurements, circuit patterns
- Quantum ML:
references/quantum_ml.md - Hybrid models, framework integration, QNNs
- Quantum chemistry:
references/quantum_chemistry.md - VQE, molecular Hamiltonians, chemistry workflows
- Devices:
references/devices_backends.md - Simulators, hardware plugins, device configuration
- Optimization:
references/optimization.md - Optimizers, gradients, variational algorithms
- Advanced:
references/advanced_features.md - Templates, transforms, JIT compilation, noise
Best Practices
- Start with simulators - Test on
default.qubit before deploying to hardware
- Use parameter-shift for hardware - Backpropagation only works on simulators
- Choose appropriate encodings - Match data encoding to problem structure
- Initialize carefully - Use small random values to avoid barren plateaus
- Monitor gradients - Check for vanishing gradients in deep circuits
- Cache devices - Reuse device objects to reduce initialization overhead
- Profile circuits - Use
qml.specs() to analyze circuit complexity
- Test locally - Validate on simulators before submitting to hardware
- Use templates - Leverage built-in templates for common circuit patterns
- Compile when possible - Use Catalyst JIT for performance-critical code
Resources
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: pennylane3description: Cross-platform Python library for quantum computing, quantum machine learning, and quantum chemistry. Enables building and training quantum circuits with automatic differentiation, seamless integration with PyTorch/JAX/TensorFlow, and device-independent execution across simulators and quantum hardware (IBM, Amazon Braket, Google, Rigetti, IonQ, etc.). Use when working with quantum circuits, variational quantum algorithms (VQE, QAOA), quantum neural networks, hybrid quantum-classical models, molecular simulations, quantum chemistry calculations, or any quantum computing tasks requiring gradient-based optimization, hardware-agnostic programming, or quantum machine learning workflows. Use when this capability is needed.4---56# PennyLane78## Overview910PennyLane is a quantum computing library that enables training quantum computers like neural networks. It provides automatic differentiation of quantum circuits, device-independent programming, and seamless integration with classical machine learning frameworks.1112## Installation1314Install using uv:1516```bash17uv pip install pennylane18```1920For quantum hardware access, install device plugins:2122```bash23# IBM Quantum24uv pip install pennylane-qiskit2526# Amazon Braket27uv pip install amazon-braket-pennylane-plugin2829# Google Cirq30uv pip install pennylane-cirq3132# Rigetti Forest33uv pip install pennylane-rigetti3435# IonQ36uv pip install pennylane-ionq37```3839## Quick Start4041Build a quantum circuit and optimize its parameters:4243```python44import pennylane as qml45from pennylane import numpy as np4647# Create device48dev = qml.device('default.qubit', wires=2)4950# Define quantum circuit51@qml.qnode(dev)52def circuit(params):53 qml.RX(params[0], wires=0)54 qml.RY(params[1], wires=1)55 qml.CNOT(wires=[0, 1])56 return qml.expval(qml.PauliZ(0))5758# Optimize parameters59opt = qml.GradientDescentOptimizer(stepsize=0.1)60params = np.array([0.1, 0.2], requires_grad=True)6162for i in range(100):63 params = opt.step(circuit, params)64```6566## Core Capabilities6768### 1. Quantum Circuit Construction6970Build circuits with gates, measurements, and state preparation. See `references/quantum_circuits.md` for:71- Single and multi-qubit gates72- Controlled operations and conditional logic73- Mid-circuit measurements and adaptive circuits74- Various measurement types (expectation, probability, samples)75- Circuit inspection and debugging7677### 2. Quantum Machine Learning7879Create hybrid quantum-classical models. See `references/quantum_ml.md` for:80- Integration with PyTorch, JAX, TensorFlow81- Quantum neural networks and variational classifiers82- Data encoding strategies (angle, amplitude, basis, IQP)83- Training hybrid models with backpropagation84- Transfer learning with quantum circuits8586### 3. Quantum Chemistry8788Simulate molecules and compute ground state energies. See `references/quantum_chemistry.md` for:89- Molecular Hamiltonian generation90- Variational Quantum Eigensolver (VQE)91- UCCSD ansatz for chemistry92- Geometry optimization and dissociation curves93- Molecular property calculations9495### 4. Device Management9697Execute on simulators or quantum hardware. See `references/devices_backends.md` for:98- Built-in simulators (default.qubit, lightning.qubit, default.mixed)99- Hardware plugins (IBM, Amazon Braket, Google, Rigetti, IonQ)100- Device selection and configuration101- Performance optimization and caching102- GPU acceleration and JIT compilation103104### 5. Optimization105106Train quantum circuits with various optimizers. See `references/optimization.md` for:107- Built-in optimizers (Adam, gradient descent, momentum, RMSProp)108- Gradient computation methods (backprop, parameter-shift, adjoint)109- Variational algorithms (VQE, QAOA)110- Training strategies (learning rate schedules, mini-batches)111- Handling barren plateaus and local minima112113### 6. Advanced Features114115Leverage templates, transforms, and compilation. See `references/advanced_features.md` for:116- Circuit templates and layers117- Transforms and circuit optimization118- Pulse-level programming119- Catalyst JIT compilation120- Noise models and error mitigation121- Resource estimation122123## Common Workflows124125### Train a Variational Classifier126127```python128# 1. Define ansatz129@qml.qnode(dev)130def classifier(x, weights):131 # Encode data132 qml.AngleEmbedding(x, wires=range(4))133134 # Variational layers135 qml.StronglyEntanglingLayers(weights, wires=range(4))136137 return qml.expval(qml.PauliZ(0))138139# 2. Train140opt = qml.AdamOptimizer(stepsize=0.01)141weights = np.random.random((3, 4, 3)) # 3 layers, 4 wires142143for epoch in range(100):144 for x, y in zip(X_train, y_train):145 weights = opt.step(lambda w: (classifier(x, w) - y)**2, weights)146```147148### Run VQE for Molecular Ground State149150```python151from pennylane import qchem152153# 1. Build Hamiltonian154symbols = ['H', 'H']155coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74])156H, n_qubits = qchem.molecular_hamiltonian(symbols, coords)157158# 2. Define ansatz159@qml.qnode(dev)160def vqe_circuit(params):161 qml.BasisState(qchem.hf_state(2, n_qubits), wires=range(n_qubits))162 qml.UCCSD(params, wires=range(n_qubits))163 return qml.expval(H)164165# 3. Optimize166opt = qml.AdamOptimizer(stepsize=0.1)167params = np.zeros(10, requires_grad=True)168169for i in range(100):170 params, energy = opt.step_and_cost(vqe_circuit, params)171 print(f"Step {i}: Energy = {energy:.6f} Ha")172```173174### Switch Between Devices175176```python177# Same circuit, different backends178circuit_def = lambda dev: qml.qnode(dev)(circuit_function)179180# Test on simulator181dev_sim = qml.device('default.qubit', wires=4)182result_sim = circuit_def(dev_sim)(params)183184# Run on quantum hardware185dev_hw = qml.device('qiskit.ibmq', wires=4, backend='ibmq_manila')186result_hw = circuit_def(dev_hw)(params)187```188189## Detailed Documentation190191For comprehensive coverage of specific topics, consult the reference files:192193- **Getting started**: `references/getting_started.md` - Installation, basic concepts, first steps194- **Quantum circuits**: `references/quantum_circuits.md` - Gates, measurements, circuit patterns195- **Quantum ML**: `references/quantum_ml.md` - Hybrid models, framework integration, QNNs196- **Quantum chemistry**: `references/quantum_chemistry.md` - VQE, molecular Hamiltonians, chemistry workflows197- **Devices**: `references/devices_backends.md` - Simulators, hardware plugins, device configuration198- **Optimization**: `references/optimization.md` - Optimizers, gradients, variational algorithms199- **Advanced**: `references/advanced_features.md` - Templates, transforms, JIT compilation, noise200201## Best Practices2022031. **Start with simulators** - Test on `default.qubit` before deploying to hardware2042. **Use parameter-shift for hardware** - Backpropagation only works on simulators2053. **Choose appropriate encodings** - Match data encoding to problem structure2064. **Initialize carefully** - Use small random values to avoid barren plateaus2075. **Monitor gradients** - Check for vanishing gradients in deep circuits2086. **Cache devices** - Reuse device objects to reduce initialization overhead2097. **Profile circuits** - Use `qml.specs()` to analyze circuit complexity2108. **Test locally** - Validate on simulators before submitting to hardware2119. **Use templates** - Leverage built-in templates for common circuit patterns21210. **Compile when possible** - Use Catalyst JIT for performance-critical code213214## Resources215216- Official documentation: https://docs.pennylane.ai217- Codebook (tutorials): https://pennylane.ai/codebook218- QML demonstrations: https://pennylane.ai/qml/demonstrations219- Community forum: https://discuss.pennylane.ai220- GitHub: https://github.com/PennyLaneAI/pennylane221222---223> Converted and distributed by [TomeVault](https://tomevault.io/claim/davila7) — claim your Tome and manage your conversions.224<!-- tomevault:4.0:skill_md:2026-04-11 -->