Qward Beginner’s Guide¶
This guide provides a comprehensive introduction to Qward, a framework for analyzing and validating quantum code execution quality on quantum processing units (QPUs).
What is Qward?¶
Qward is a framework built on top of Qiskit that helps quantum developers understand how their quantum algorithms perform on both simulators and real quantum hardware. It provides tools to:
Create and run quantum circuits
Collect execution metrics
Analyze circuit performance
Validate algorithm correctness
Compare results across different backends
Calculate circuit complexity metrics
Estimate quantum volume
Key Concepts¶
Validators¶
In Qward, validators are the main components you’ll work with. They are quantum circuits with added functionality for:
Setting up experiments
Defining success criteria
Running simulations with multiple jobs/shots
Executing on IBM Quantum hardware
Analyzing results
Calculating circuit complexity
Estimating quantum volume
Analysis¶
Qward provides analysis tools to help you understand your quantum algorithm’s performance:
Success rate analysis
Statistical aggregation
Visualization tools
Circuit complexity metrics
Quantum volume estimation
Getting Started¶
Installation¶
You can set up Qward in two ways:
Option 1: Local Installation¶
# Clone the repository
git clone https://github.com/your-org/qiskit-qward.git
cd qiskit-qward
# Install in development mode
pip install -e .
# Set up IBM Quantum credentials
cp .env.example .env
# Edit .env with your IBM Quantum token
Option 2: Using Docker¶
# Clone the repository
git clone https://github.com/your-org/qiskit-qward.git
cd qiskit-qward
# Copy and edit .env file
cp .env.example .env
# Edit .env with your IBM Quantum token
# Start Docker container with Jupyter Lab
chmod +x start.sh
./start.sh
This will open a Jupyter Lab interface in your browser where you can run the examples and tutorials.
First Steps: The Quantum Coin Flip¶
Let’s start with a simple example - the quantum coin flip. This uses a single qubit in superposition to simulate a fair coin toss.
# If running in a notebook, ensure paths are set up correctly
from qward.examples.flip_coin.scanner import ScanningQuantumFlipCoin
# Create the validator
scanner = ScanningQuantumFlipCoin(use_barriers=True)
# Show the circuit
print("Quantum Coin Flip Circuit:")
circuit_fig = scanner.draw()
display(circuit_fig)
# Run simulation
print("\nRunning quantum simulation jobs...")
results = scanner.run_simulation(
show_histogram=True,
num_jobs=100,
shots_per_job=1024
)
# Check results
analysis = results["analysis"]["analyzer_0"]
print(f"\nSuccess rate (tails): {analysis['mean_success_rate']:.2%}")
print(f"Standard deviation: {analysis['std_success_rate']:.2%}")
# Examine complexity metrics
complexity = results["complexity_metrics"]
print(f"\nGate count: {complexity['gate_based_metrics']['gate_count']}")
print(f"Circuit depth: {complexity['gate_based_metrics']['circuit_depth']}")
print(f"Circuit volume: {complexity['standardized_metrics']['circuit_volume']}")
# Check quantum volume
qv = results["quantum_volume"]
print(f"\nQuantum Volume: {qv['standard_quantum_volume']}")
print(f"Enhanced Quantum Volume: {qv['enhanced_quantum_volume']}")
This circuit:
Applies a Hadamard gate to put a qubit in superposition (50% |0⟩, 50% |1⟩)
Measures the qubit
Runs multiple jobs to collect statistics
Analyzes the results to verify the coin is fair
Calculates circuit complexity metrics
Estimates quantum volume
Understanding the Circuit¶
The quantum coin flip circuit is simple but demonstrates important quantum principles:
┌───┐┌─┐
┤ H ├┤M├
└───┘└╥┘
┌╨┐
│0│
└─┘
H gate: Creates an equal superposition of |0⟩ and |1⟩
Measurement: Collapses the superposition into either 0 (heads) or 1 (tails)
The results should show approximately 50% heads and 50% tails, demonstrating quantum randomness.
Going Further: The Two Doors Enigma¶
For a more complex example, try the Two Doors Enigma validator. This implements a quantum solution to a classic puzzle involving truth-tellers and liars.
from qward.examples.two_doors_enigma.scanner import ScanningQuantumEnigma
# Create the validator
scanner = ScanningQuantumEnigma()
# Run simulation
results = scanner.run_simulation(show_histogram=True)
# Check analysis results
analysis = scanner.run_analysis()["analyzer_0"]
print(f"Success rate: {analysis['mean_success_rate']:.2%}")
# Examine complexity metrics
complexity = results["complexity_metrics"]
print(f"Circuit depth: {complexity['gate_based_metrics']['circuit_depth']}")
print(f"CNOT count: {complexity['gate_based_metrics']['cnot_count']}")
print(f"Entangling gate density: {complexity['entanglement_metrics']['entangling_gate_density']}")
# Check quantum volume
qv = results["quantum_volume"]
print(f"Quantum Volume: {qv['standard_quantum_volume']}")
print(f"Enhanced Quantum Volume: {qv['enhanced_quantum_volume']}")
This example demonstrates more advanced quantum concepts:
Multiple qubits and classical bits
Entanglement with CNOT gates
Complex quantum logic
Higher circuit complexity
Larger quantum volume
Understanding Circuit Complexity¶
Qward provides comprehensive circuit complexity analysis through the calculate_complexity_metrics()
method. This helps you understand your circuit’s resource requirements and algorithmic complexity.
Key metrics include:
Gate-based Metrics:
Gate count, circuit depth, T-count, CNOT count
Two-qubit gate count and multi-qubit operation ratio
Entanglement Metrics:
Entangling gate density
Entangling width (maximum qubits that could be entangled)
Standardized Metrics:
Circuit volume (depth × width)
Gate density
Clifford vs non-Clifford gate ratios
Advanced Metrics:
Parallelism factors
Circuit efficiency
Quantum resource utilization
You can access these metrics directly:
# Create a scanner
scanner = ScanningQuantumFlipCoin()
# Calculate complexity metrics
metrics = scanner.calculate_complexity_metrics()
# Print selected metrics
print(f"Gate count: {metrics['gate_based_metrics']['gate_count']}")
print(f"Circuit depth: {metrics['gate_based_metrics']['circuit_depth']}")
print(f"Circuit volume: {metrics['standardized_metrics']['circuit_volume']}")
Quantum Volume Estimation¶
Quantum Volume is an important metric for understanding a circuit’s computational capacity. Qward extends the standard quantum volume calculation with an enhanced metric that considers additional circuit characteristics.
The estimate_quantum_volume()
method returns:
Standard Quantum Volume: Calculated as 2^n where n is the effective depth
Enhanced Quantum Volume: Factors in square ratio, density, and gate complexity
Contributing Factors: Details on what affects the quantum volume
Example usage:
# Create a scanner
scanner = ScanningQuantumEnigma()
# Calculate quantum volume
qv = scanner.estimate_quantum_volume()
# Access quantum volume metrics
print(f"Standard QV: {qv['standard_quantum_volume']}")
print(f"Enhanced QV: {qv['enhanced_quantum_volume']}")
print(f"Effective depth: {qv['effective_depth']}")
# Examine contributing factors
for factor, value in qv['factors'].items():
print(f"{factor}: {value}")
Creating Your Own Validator¶
To create your own validator, extend the ScanningQuantumCircuit class:
from qward.scanning_quantum_circuit import ScanningQuantumCircuit
from qward.analysis.success_rate import SuccessRate
class MyCustomValidator(ScanningQuantumCircuit):
def __init__(self, use_barriers=True):
# Initialize with desired qubits and classical bits
super().__init__(num_qubits=2, num_clbits=2, use_barriers=use_barriers, name="my_circuit")
# Define success criteria
def success_criteria(state):
# For example, consider "00" a success
return state == "00"
# Add success rate analyzer with custom criteria
success_analyzer = SuccessRate()
success_analyzer.set_success_criteria(success_criteria)
self.add_analyzer(success_analyzer)
# Build the circuit
self._build_circuit()
def _build_circuit(self):
# Implement your quantum circuit here
self.h(0) # Apply Hadamard to qubit 0
self.cx(0, 1) # CNOT with control qubit 0, target qubit 1
if self.use_barriers:
self.barrier()
self.measure([0, 1], [0, 1]) # Measure both qubits
Next Steps¶
Explore the Tutorials for more detailed examples
Check the Technical Documentation for advanced usage
Read the API Documentation for a complete reference
Try the example notebooks:
Flip Coin:
qward/examples/flip_coin/notebook_demo.ipynb
Two Doors Enigma:
qward/examples/two_doors_enigma/notebook_demo.ipynb