Circuit Performance Metrics¶
CircuitPerformanceMetrics analyzes quantum circuit execution performance using the unified schema-based API.
Key Features: - Unified API: Single get_metrics() method returns CircuitPerformanceSchema - Custom Success Criteria: User-defined success conditions for flexible analysis - Multi-Job Support: Handles both single job and multiple job analysis - Type Safety: Full validation with automatic constraint checking
Metric Categories: - Success Metrics: Success rate, error rate, successful shots analysis - Statistical Metrics: Entropy, uniformity, concentration analysis
Usage Example:
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qward.metrics import CircuitPerformanceMetrics
# Create and execute circuit
circuit = QuantumCircuit(2, 2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
simulator = AerSimulator()
job = simulator.run(circuit, shots=1000)
# Define custom success criteria
def bell_state_success(result: str) -> bool:
clean_result = result.replace(" ", "")
return clean_result in ["00", "11"] # |00⟩ or |11⟩ states
# Analyze with type-safe API
circuit_performance = CircuitPerformanceMetrics(
circuit=circuit,
job=job,
success_criteria=bell_state_success
)
metrics = circuit_performance.get_metrics() # Returns CircuitPerformanceSchema
# Access validated performance data
print(f"Success rate: {metrics.success_metrics.success_rate:.3f}")
print(f"Error rate: {metrics.success_metrics.error_rate:.3f}")
print(f"Entropy: {metrics.statistical_metrics.entropy:.3f}")
API Reference¶
Circuit performance metrics implementation for QWARD.
This module provides the CircuitPerformanceMetrics class for analyzing the performance of quantum circuits based on job execution results. It supports both single job and multiple job analysis with customizable success criteria.
Supports multiple job types: - AerJob: Qiskit Aer simulator jobs - QiskitJob (JobV1): Traditional Qiskit jobs - RuntimeJobV2: IBM Quantum Runtime V2 primitive jobs (SamplerV2, EstimatorV2)
The performance metrics help evaluate the success rate and statistical properties of quantum circuit executions.
- class CircuitPerformanceMetrics(circuit, *, job=None, jobs=None, success_criteria=None, expected_outcomes=None)[source]¶
Bases:
MetricCalculatorCalculate circuit performance metrics for quantum circuits.
This class provides methods for analyzing the performance of quantum circuits based on job execution results. It supports both single job and multiple job analysis with customizable success criteria.
Supports multiple job types: - AerJob: Qiskit Aer simulator jobs - QiskitJob (JobV1): Traditional Qiskit jobs - RuntimeJobV2: IBM Quantum Runtime V2 primitive jobs (SamplerV2, EstimatorV2)
The performance metrics include: - Success metrics: Success rate, error rate, successful shots analysis - Statistical metrics: Entropy, uniformity, concentration analysis
Example
# Basic usage with default success criteria (ground state) performance = CircuitPerformanceMetrics(circuit, job=job) metrics = performance.get_metrics()
# With RuntimeJobV2 from SamplerV2 from qiskit_ibm_runtime import SamplerV2 as Sampler sampler = Sampler(backend) job = sampler.run([circuit]) # Returns RuntimeJobV2 performance = CircuitPerformanceMetrics(circuit, job=job) success_metrics = performance.get_success_metrics()
# With custom success criteria def custom_success(state): return state == “101”
- performance = CircuitPerformanceMetrics(
circuit, job=job, success_criteria=custom_success
) success_metrics = performance.get_success_metrics()
Initialize a CircuitPerformanceMetrics object.
- Parameters:
circuit (
QuantumCircuit) – The quantum circuit to analyzejob (
Union[AerJob,RuntimeJobV2,None]) – A single job that executed the circuitjobs (
Optional[List[Union[AerJob,RuntimeJobV2]]]) – A list of jobs that executed the circuit (for multiple runs)success_criteria (
Optional[Callable[[str],bool]]) – Function that determines if a measurement result is successfulexpected_outcomes (
Optional[List[str]]) – Expected bitstrings for DSR histogram contrast calculations
- add_job(job)[source]¶
Add one or more jobs to the list of jobs for multiple job metrics.
- Parameters:
job (
Union[AerJob,RuntimeJobV2,List[Union[AerJob,RuntimeJobV2]]]) – A single job or a list of jobs to add- Return type:
None
- static create_bell_state_distribution()[source]¶
Create the expected distribution for a Bell state (|00⟩ + |11⟩)/√2.
- Returns:
Bell state distribution
- Return type:
Dict[str, float]
- static create_ground_state_distribution(num_qubits)[source]¶
Create a distribution where only the ground state (|000…⟩) has probability 1.
- Parameters:
num_qubits (
int) – Number of qubits in the circuit- Returns:
Ground state distribution
- Return type:
Dict[str, float]
- static create_uniform_distribution(num_qubits)[source]¶
Create a uniform distribution over all possible measurement outcomes.
- Parameters:
num_qubits (
int) – Number of qubits in the circuit- Returns:
Uniform probability distribution
- Return type:
Dict[str, float]
- get_dsr_metrics()[source]¶
Get Differential Success Rate metrics as a validated schema object.
- Returns:
Validated DSR metrics schema
- Return type:
DSRVariantsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValueError – If expected outcomes are not configured
ValidationError – If metrics data doesn’t match schema constraints
- get_dsr_metrics_dict()[source]¶
Get Differential Success Rate metrics as a dictionary.
- Returns:
Dictionary containing DSR variant and mismatch metrics
- Return type:
Dict[str, Any]
- get_metrics()[source]¶
Get all performance metrics as a structured, validated schema object.
- Returns:
Complete validated performance metrics schema
- Return type:
CircuitPerformanceSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- get_multiple_jobs_metrics()[source]¶
Calculate circuit performance metrics from multiple job results.
DEPRECATED: Use get_success_metrics() or get_statistical_metrics() instead.
- Returns:
Circuit performance metrics for multiple jobs with individual and aggregate data
- Return type:
Dict[str, Any]
- get_single_job_metrics(job=None)[source]¶
Calculate circuit performance metrics from a single job result.
DEPRECATED: Use get_success_metrics() or get_statistical_metrics() instead.
- Parameters:
job (
Union[AerJob,RuntimeJobV2,None]) – Optional job to use for metrics calculation. If None, uses self._job.- Returns:
Circuit performance metrics for a single job
- Return type:
Dict[str, Any]
- get_statistical_metrics()[source]¶
Get statistical analysis metrics as a validated schema object.
- Returns:
Validated statistical metrics schema
- Return type:
StatisticalMetricsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- get_statistical_metrics_dict()[source]¶
Get statistical analysis metrics as a dictionary.
- Returns:
Dictionary containing entropy, uniformity, and concentration metrics
- Return type:
Dict[str, Any]
- get_structured_multiple_jobs_metrics()[source]¶
Get multiple jobs metrics as a validated schema object.
DEPRECATED: Use get_structured_metrics() instead.
- Returns:
Validated aggregate metrics
- Return type:
CircuitPerformanceSchema
- get_structured_single_job_metrics(job=None)[source]¶
Get single job metrics as a validated schema object.
DEPRECATED: Use get_structured_metrics() instead.
- Returns:
Validated single job metrics
- Return type:
CircuitPerformanceSchema
- get_success_metrics()[source]¶
Get success rate analysis metrics as a validated schema object.
- Returns:
Validated success metrics schema
- Return type:
SuccessMetricsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- class CircuitPerformanceMetrics(circuit, *, job=None, jobs=None, success_criteria=None, expected_outcomes=None)[source]¶
Bases:
MetricCalculatorCalculate circuit performance metrics for quantum circuits.
This class provides methods for analyzing the performance of quantum circuits based on job execution results. It supports both single job and multiple job analysis with customizable success criteria.
Supports multiple job types: - AerJob: Qiskit Aer simulator jobs - QiskitJob (JobV1): Traditional Qiskit jobs - RuntimeJobV2: IBM Quantum Runtime V2 primitive jobs (SamplerV2, EstimatorV2)
The performance metrics include: - Success metrics: Success rate, error rate, successful shots analysis - Statistical metrics: Entropy, uniformity, concentration analysis
Example
# Basic usage with default success criteria (ground state) performance = CircuitPerformanceMetrics(circuit, job=job) metrics = performance.get_metrics()
# With RuntimeJobV2 from SamplerV2 from qiskit_ibm_runtime import SamplerV2 as Sampler sampler = Sampler(backend) job = sampler.run([circuit]) # Returns RuntimeJobV2 performance = CircuitPerformanceMetrics(circuit, job=job) success_metrics = performance.get_success_metrics()
# With custom success criteria def custom_success(state): return state == “101”
- performance = CircuitPerformanceMetrics(
circuit, job=job, success_criteria=custom_success
) success_metrics = performance.get_success_metrics()
Initialize a CircuitPerformanceMetrics object.
- Parameters:
circuit (
QuantumCircuit) – The quantum circuit to analyzejob (
Union[AerJob,RuntimeJobV2,None]) – A single job that executed the circuitjobs (
Optional[List[Union[AerJob,RuntimeJobV2]]]) – A list of jobs that executed the circuit (for multiple runs)success_criteria (
Optional[Callable[[str],bool]]) – Function that determines if a measurement result is successfulexpected_outcomes (
Optional[List[str]]) – Expected bitstrings for DSR histogram contrast calculations
- add_job(job)[source]¶
Add one or more jobs to the list of jobs for multiple job metrics.
- Parameters:
job (
Union[AerJob,RuntimeJobV2,List[Union[AerJob,RuntimeJobV2]]]) – A single job or a list of jobs to add- Return type:
None
- property circuit: QuantumCircuit¶
Get the quantum circuit.
- Returns:
The quantum circuit
- Return type:
QuantumCircuit
- static create_bell_state_distribution()[source]¶
Create the expected distribution for a Bell state (|00⟩ + |11⟩)/√2.
- Returns:
Bell state distribution
- Return type:
Dict[str, float]
- static create_ground_state_distribution(num_qubits)[source]¶
Create a distribution where only the ground state (|000…⟩) has probability 1.
- Parameters:
num_qubits (
int) – Number of qubits in the circuit- Returns:
Ground state distribution
- Return type:
Dict[str, float]
- static create_uniform_distribution(num_qubits)[source]¶
Create a uniform distribution over all possible measurement outcomes.
- Parameters:
num_qubits (
int) – Number of qubits in the circuit- Returns:
Uniform probability distribution
- Return type:
Dict[str, float]
- get_dsr_metrics()[source]¶
Get Differential Success Rate metrics as a validated schema object.
- Returns:
Validated DSR metrics schema
- Return type:
DSRVariantsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValueError – If expected outcomes are not configured
ValidationError – If metrics data doesn’t match schema constraints
- get_dsr_metrics_dict()[source]¶
Get Differential Success Rate metrics as a dictionary.
- Returns:
Dictionary containing DSR variant and mismatch metrics
- Return type:
Dict[str, Any]
- get_metrics()[source]¶
Get all performance metrics as a structured, validated schema object.
- Returns:
Complete validated performance metrics schema
- Return type:
CircuitPerformanceSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- get_multiple_jobs_metrics()[source]¶
Calculate circuit performance metrics from multiple job results.
DEPRECATED: Use get_success_metrics() or get_statistical_metrics() instead.
- Returns:
Circuit performance metrics for multiple jobs with individual and aggregate data
- Return type:
Dict[str, Any]
- get_single_job_metrics(job=None)[source]¶
Calculate circuit performance metrics from a single job result.
DEPRECATED: Use get_success_metrics() or get_statistical_metrics() instead.
- Parameters:
job (
Union[AerJob,RuntimeJobV2,None]) – Optional job to use for metrics calculation. If None, uses self._job.- Returns:
Circuit performance metrics for a single job
- Return type:
Dict[str, Any]
- get_statistical_metrics()[source]¶
Get statistical analysis metrics as a validated schema object.
- Returns:
Validated statistical metrics schema
- Return type:
StatisticalMetricsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- get_statistical_metrics_dict()[source]¶
Get statistical analysis metrics as a dictionary.
- Returns:
Dictionary containing entropy, uniformity, and concentration metrics
- Return type:
Dict[str, Any]
- get_structured_multiple_jobs_metrics()[source]¶
Get multiple jobs metrics as a validated schema object.
DEPRECATED: Use get_structured_metrics() instead.
- Returns:
Validated aggregate metrics
- Return type:
CircuitPerformanceSchema
- get_structured_single_job_metrics(job=None)[source]¶
Get single job metrics as a validated schema object.
DEPRECATED: Use get_structured_metrics() instead.
- Returns:
Validated single job metrics
- Return type:
CircuitPerformanceSchema
- get_success_metrics()[source]¶
Get success rate analysis metrics as a validated schema object.
- Returns:
Validated success metrics schema
- Return type:
SuccessMetricsSchema
- Raises:
ImportError – If Pydantic schemas are not available
ValidationError – If metrics data doesn’t match schema constraints
- get_success_metrics_dict()[source]¶
Get success rate analysis metrics as a dictionary.
- Returns:
Dictionary containing success rate, error rate, and shot analysis
- Return type:
Dict[str, Any]
- property metric_type: MetricsType¶
Get the type of this metric.
- Returns:
The type of this metric
- Return type:
- property name: str¶
Get the name of the metric.
- Returns:
The name of the metric class.
- Return type:
str