-
Notifications
You must be signed in to change notification settings - Fork 0
Framework Guide
Comprehensive guide to choosing and using quantum computing frameworks in openqcp-lab: Classiq, PennyLane, and Qiskit.
- Framework Overview
- Classiq
- PennyLane
- Qiskit
- Framework Comparison
- Choosing a Framework
- Installation and Setup
- Migration Guide
The openqcp-lab project uses three quantum computing frameworks, each optimized for different use cases:
| Framework | Primary Use | Tutorials | Best For |
|---|---|---|---|
| Classiq | Algorithm design, synthesis | 00, 02, 03, 05 | High-level design, automatic optimization |
| PennyLane | Optimization, ML | 01 | Variational algorithms, gradients |
| Qiskit | IBM Quantum, VQE | 04 | Hardware access, VQE, QUBO |
Classiq is a high-level quantum programming platform that focuses on automatic circuit synthesis and optimization. It allows you to describe quantum algorithms at a high level and automatically generates optimized quantum circuits.
- High-Level Programming: Describe algorithms conceptually, not gate-by-gate
- Automatic Synthesis: Automatically generates optimized quantum circuits
- Circuit Optimization: Built-in optimization for depth, gate count, etc.
- Multiple Backends: Supports various quantum hardware and simulators
- Python Integration: Native Python API
- Tutorial 00: Quantum Fourier Transform
- Tutorial 02: Quantum Walk
- Tutorial 03: Non-Unitary Computing (LCU)
- Tutorial 05: Coupled Harmonic Oscillators
✅ High-level abstraction - Focus on algorithm, not gates
✅ Automatic optimization - Circuit synthesis handles optimization
✅ Research-friendly - Good for algorithm development
✅ Educational - Clear separation of algorithm and implementation
pip install classiqIncluded in requirements.txt.
from classiq import *
@qfunc
def my_quantum_function(x: QNum):
# High-level quantum operations
pass
# Synthesize and execute
quantum_model = create_model(my_quantum_function)- Designing new quantum algorithms
- Need automatic circuit optimization
- Educational/research purposes
- Want high-level abstraction
- Working on algorithm development
PennyLane is a quantum machine learning and optimization framework that excels at variational quantum algorithms and automatic differentiation. It provides seamless integration between quantum and classical machine learning.
- Automatic Differentiation: Compute gradients of quantum circuits
- Variational Algorithms: Optimized for VQE, QAOA, and similar algorithms
- Multiple Backends: Supports many quantum devices and simulators
- Machine Learning Integration: Works with PyTorch, TensorFlow, JAX
- Optimization Tools: Built-in optimizers for quantum optimization
- Tutorial 01: Minimize Expectation Value
✅ Gradient computation - Automatic differentiation for quantum circuits
✅ Optimization focus - Excellent for variational algorithms
✅ ML integration - Seamless with classical ML frameworks
✅ Multiple backends - Supports many quantum devices
✅ User-friendly - Intuitive API for optimization
pip install pennylaneIncluded in requirements.txt.
import pennylane as qml
dev = qml.device("default.qubit", wires=2)
@qml.qnode(dev)
def circuit(params):
qml.StronglyEntanglingLayers(params, wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Optimize
opt = qml.GradientDescentOptimizer(stepsize=0.4)
params = opt.step(circuit, initial_params)- Variational quantum algorithms (VQE, QAOA)
- Quantum machine learning
- Need automatic differentiation
- Optimization problems
- Gradient-based optimization
Qiskit is IBM's quantum computing framework, providing comprehensive tools for quantum circuit design, optimization, and execution on IBM Quantum hardware. It's widely used in industry and research.
- IBM Quantum Access: Direct access to IBM Quantum hardware
- Comprehensive Tooling: Full ecosystem for quantum computing
- VQE Support: Excellent support for Variational Quantum Eigensolvers
- Optimization Tools: QUBO problem solving and optimization
- Active Community: Large community and extensive documentation
- Tutorial 04: Quantum Variational Algorithms (VQE, QUBO)
✅ Hardware access - Direct access to IBM Quantum devices
✅ Comprehensive - Full-featured quantum computing framework
✅ Industry standard - Widely used in industry and research
✅ VQE support - Excellent VQE and optimization tools
✅ Community - Large, active community
pip install qiskit qiskit-optimizationNote: Qiskit is an optional dependency. Tutorials will install it automatically if needed, or you can install manually.
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_algorithms import VQE
from qiskit_algorithms.optimizers import SLSQP
from qiskit.circuit.library import EfficientSU2
# Create Hamiltonian
hamiltonian = SparsePauliOp.from_list([("ZZ", 1.0)])
# Setup VQE
ansatz = EfficientSU2(2)
optimizer = SLSQP()
vqe = VQE(ansatz, optimizer)
result = vqe.compute_minimum_eigenvalue(hamiltonian)- Need IBM Quantum hardware access
- Working with VQE and QUBO problems
- Industry/research applications
- Need comprehensive quantum computing tools
- Optimization problems (QUBO)
| Feature | Classiq | PennyLane | Qiskit |
|---|---|---|---|
| Primary Focus | Algorithm design | Optimization/ML | Hardware/Industry |
| Learning Curve | Moderate | Moderate | Steep |
| Hardware Access | Limited | Good | Excellent (IBM) |
| Automatic Gradients | Limited | Excellent | Limited |
| Circuit Optimization | Excellent | Good | Good |
| VQE Support | Good | Excellent | Excellent |
| High-Level Abstraction | Excellent | Good | Limited |
| Gate-Level Control | Limited | Good | Excellent |
| Community Size | Growing | Large | Very Large |
| Documentation | Good | Excellent | Excellent |
| Use Case | Best Framework | Alternative |
|---|---|---|
| Algorithm Development | Classiq | Qiskit |
| Variational Optimization | PennyLane | Qiskit |
| Quantum ML | PennyLane | Qiskit |
| IBM Hardware | Qiskit | PennyLane |
| Research/Education | Classiq | PennyLane |
| Industry Applications | Qiskit | PennyLane |
| QUBO Problems | Qiskit | PennyLane |
| Circuit Optimization | Classiq | Qiskit |
| Aspect | Classiq | PennyLane | Qiskit |
|---|---|---|---|
| Circuit Synthesis Speed | Fast | N/A | N/A |
| Optimization Speed | Fast | Fast | Moderate |
| Execution Speed | Depends on backend | Depends on backend | Depends on backend |
| Memory Usage | Moderate | Low | Moderate-High |
Start
│
├─ Need IBM Quantum hardware?
│ └─ Yes → Qiskit
│
├─ Working on optimization/ML?
│ └─ Yes → PennyLane
│
├─ Designing new algorithms?
│ └─ Yes → Classiq
│
├─ Need automatic gradients?
│ └─ Yes → PennyLane
│
└─ Need high-level abstraction?
└─ Yes → Classiq
└─ No → Qiskit (for control) or PennyLane (for optimization)
- Tutorial 00, 02, 03, 05: Use Classiq (required)
- Tutorial 01: Use PennyLane (required)
- Tutorial 04: Use Qiskit (required)
- Beginners: Start with Classiq (high-level) or PennyLane (intuitive)
- Intermediate: Any framework based on use case
- Advanced: Qiskit for control, PennyLane for optimization, Classiq for research
- Research/Education: Classiq or PennyLane
- Industry/Production: Qiskit
- Optimization Problems: PennyLane or Qiskit
- Algorithm Development: Classiq
Basic Installation:
pip install classiqVerification:
from classiq import *
print("Classiq installed successfully")Authentication (if needed):
- Some features may require API authentication
- See Classiq Documentation for details
Basic Installation:
pip install pennylaneVerification:
import pennylane as qml
print("PennyLane version:", qml.__version__)Optional Backends:
# For specific backends (if needed)
pip install pennylane-qiskit # Qiskit backend
pip install pennylane-cirq # Cirq backendBasic Installation:
pip install qiskit qiskit-optimizationVerification:
import qiskit
print("Qiskit version:", qiskit.__version__)IBM Quantum Access (optional):
from qiskit import IBMQ
IBMQ.save_account('YOUR_API_TOKEN') # One-time setupNote: Qiskit is an optional dependency. Tutorials will install it automatically if needed.
Key Differences:
- Classiq: High-level functions → Qiskit: Gate-level circuits
- Classiq: Automatic synthesis → Qiskit: Manual circuit construction
- Classiq:
@qfuncdecorator → Qiskit:QuantumCircuitclass
Example Migration:
# Classiq
@qfunc
def my_function(x: QNum):
hadamard_transform(x)
# Qiskit equivalent
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h([0, 1, 2])Key Differences:
- PennyLane:
@qml.qnodedecorator → Qiskit:QuantumCircuitclass - PennyLane: Automatic gradients → Qiskit: Manual gradient computation
- PennyLane: Device abstraction → Qiskit: Backend-specific
Example Migration:
# PennyLane
@qml.qnode(dev)
def circuit(params):
qml.StronglyEntanglingLayers(params, wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Qiskit equivalent
from qiskit.circuit.library import EfficientSU2
ansatz = EfficientSU2(2)
# Manual expectation value computationKey Differences:
- Qiskit: Manual circuit construction → PennyLane: Decorator-based
- Qiskit: Manual gradients → PennyLane: Automatic differentiation
- Qiskit: Backend-specific → PennyLane: Device abstraction
Example Migration:
# Qiskit
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
# PennyLane equivalent
@qml.qnode(dev)
def circuit():
qml.Hadamard(wires=0)
qml.CNOT(wires=[0, 1])
return qml.state()Issue: Import errors
- Solution:
pip install --upgrade classiq - Check Python version (3.8+ required)
Issue: Authentication errors
- Solution: Some features require API authentication
- See Classiq documentation for setup
Issue: Circuit synthesis errors
- Solution: Check function definitions
- Verify quantum function syntax
Issue: Backend not found
- Solution: Install specific backend plugin
- Check device name spelling
Issue: Gradient computation errors
- Solution: Ensure differentiable operations
- Check parameter shapes
Issue: Optimization not converging
- Solution: Adjust optimizer parameters
- Try different optimizers
Issue: Import errors
- Solution:
pip install --upgrade qiskit - Check for version conflicts
Issue: IBM Quantum access errors
- Solution: Verify API token
- Check account status
Issue: VQE execution errors
- Solution: Verify Hamiltonian format
- Check ansatz compatibility
- See individual tutorial pages for framework-specific examples
- Getting Started for setup instructions
- Tutorial Catalog for framework usage in tutorials
Return to: Home | Getting Started | Tutorial Catalog