Circuits API Reference¶
SuperQuantX provides comprehensive quantum circuit construction, manipulation, and execution capabilities. This API reference covers quantum circuits, gates, measurements, and noise modeling.
Quantum Circuits¶
Quantum Circuit¶
superquantx.circuits.QuantumCircuit ¶
Quantum circuit representation with gate operations and measurements
This class provides a high-level interface for building and manipulating quantum circuits compatible with multiple quantum computing frameworks.
Initialize a quantum circuit
Parameters:
Name | Type | Description | Default |
---|---|---|---|
num_qubits
|
int
|
Number of qubits in the circuit |
required |
num_classical_bits
|
int | None
|
Number of classical bits (defaults to num_qubits) |
None
|
name
|
str | None
|
Optional circuit name |
None
|
Source code in src/superquantx/circuits.py
Functions¶
copy ¶
add_register ¶
Add a quantum or classical register to the circuit
Source code in src/superquantx/circuits.py
h ¶
x ¶
y ¶
z ¶
s ¶
sdg ¶
t ¶
tdg ¶
rx ¶
ry ¶
rz ¶
u ¶
Apply general unitary gate U(θ,φ,λ)
cx ¶
cnot ¶
cy ¶
cz ¶
swap ¶
crx ¶
Apply controlled rotation around X-axis
cry ¶
Apply controlled rotation around Y-axis
crz ¶
Apply controlled rotation around Z-axis
ccx ¶
Apply Toffoli (CCNOT) gate
toffoli ¶
cswap ¶
Apply controlled SWAP (Fredkin) gate
fredkin ¶
measure ¶
measure_all ¶
barrier ¶
Add a barrier (prevents gate reordering across barrier)
compose ¶
Compose this circuit with another circuit
Parameters:
Name | Type | Description | Default |
---|---|---|---|
other
|
QuantumCircuit
|
Circuit to compose with |
required |
qubits
|
list[int] | None
|
Qubit mapping for the other circuit |
None
|
Returns:
Type | Description |
---|---|
QuantumCircuit
|
New composed circuit |
Source code in src/superquantx/circuits.py
inverse ¶
Return the inverse (adjoint) of the circuit
Source code in src/superquantx/circuits.py
to_dict ¶
Convert circuit to dictionary representation
Source code in src/superquantx/circuits.py
to_json ¶
from_dict
classmethod
¶
Create circuit from dictionary representation
Source code in src/superquantx/circuits.py
from_json
classmethod
¶
draw ¶
Draw the circuit in text format
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output
|
str
|
Output format ("text" only for now) |
'text'
|
Returns:
Type | Description |
---|---|
str
|
String representation of the circuit |
Source code in src/superquantx/circuits.py
Quantum Gate¶
superquantx.circuits.QuantumGate ¶
Classical Register¶
superquantx.circuits.ClassicalRegister ¶
Bases: BaseModel
Represents a classical register for measurements
Quantum Gates¶
Gate Matrix Library¶
superquantx.gates.GateMatrix ¶
Quantum gate matrix representations and operations
Functions¶
rx
staticmethod
¶
ry
staticmethod
¶
rz
staticmethod
¶
u
staticmethod
¶
General single-qubit unitary gate U(θ,φ,λ)
Source code in src/superquantx/gates.py
phase
staticmethod
¶
cnot
staticmethod
¶
cz
staticmethod
¶
swap
staticmethod
¶
iswap
staticmethod
¶
crx
staticmethod
¶
Controlled rotation around X-axis
Source code in src/superquantx/gates.py
cry
staticmethod
¶
Controlled rotation around Y-axis
Source code in src/superquantx/gates.py
crz
staticmethod
¶
Controlled rotation around Z-axis
xx
staticmethod
¶
XX interaction gate
Source code in src/superquantx/gates.py
yy
staticmethod
¶
YY interaction gate
Source code in src/superquantx/gates.py
zz
staticmethod
¶
ZZ interaction gate
Source code in src/superquantx/gates.py
toffoli
staticmethod
¶
fredkin
staticmethod
¶
Pauli String Operations¶
superquantx.gates.PauliString ¶
Represents a Pauli string for Hamiltonian construction
Initialize Pauli string
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pauli_ops
|
str
|
String of Pauli operators (e.g., "IXZY") |
required |
coefficient
|
complex
|
Complex coefficient |
1.0
|
Source code in src/superquantx/gates.py
Functions¶
matrix ¶
Get the matrix representation of the Pauli string
Source code in src/superquantx/gates.py
commutes_with ¶
Check if this Pauli string commutes with another
Source code in src/superquantx/gates.py
Hamiltonian Operations¶
superquantx.gates.Hamiltonian ¶
Quantum Hamiltonian represented as sum of Pauli strings
Initialize Hamiltonian
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pauli_strings
|
list[PauliString]
|
List of Pauli strings that sum to form the Hamiltonian |
required |
Source code in src/superquantx/gates.py
Functions¶
matrix ¶
Get matrix representation of the Hamiltonian
Source code in src/superquantx/gates.py
expectation_value ¶
ground_state_energy ¶
time_evolution ¶
from_dict
classmethod
¶
Create Hamiltonian from dictionary
Parameters:
Name | Type | Description | Default |
---|---|---|---|
hamiltonian_dict
|
dict[str, complex]
|
Dictionary mapping Pauli strings to coefficients |
required |
Example
{"IXZI": 0.5, "YZII": -0.3, "ZXYX": 1.2j}
Source code in src/superquantx/gates.py
heisenberg_model
staticmethod
¶
heisenberg_model(num_qubits: int, Jx: float = 1.0, Jy: float = 1.0, Jz: float = 1.0, periodic: bool = False) -> Hamiltonian
Create Heisenberg model Hamiltonian
H = Σᵢ (Jₓ XᵢXᵢ₊₁ + Jᵧ YᵢYᵢ₊₁ + Jᵤ ZᵢZᵢ₊₁)
Source code in src/superquantx/gates.py
ising_model
staticmethod
¶
Create transverse field Ising model Hamiltonian
H = -J Σᵢ ZᵢZᵢ₊₁ - h Σᵢ Xᵢ
Source code in src/superquantx/gates.py
Measurements¶
Measurement Result¶
superquantx.measurements.MeasurementResult ¶
Bases: BaseModel
Represents the result of quantum measurements
Attributes¶
Functions¶
model_post_init ¶
marginal_counts ¶
Get marginal counts for specific qubits
Parameters:
Name | Type | Description | Default |
---|---|---|---|
qubits
|
list[int]
|
List of qubit indices to marginalize over |
required |
Returns:
Type | Description |
---|---|
dict[str, int]
|
Marginal counts dictionary |
Source code in src/superquantx/measurements.py
expectation_value ¶
Calculate expectation value for Pauli observable
Parameters:
Name | Type | Description | Default |
---|---|---|---|
observable
|
str
|
Pauli string (e.g., "ZZI") |
required |
Returns:
Type | Description |
---|---|
float
|
Expectation value |
Source code in src/superquantx/measurements.py
entropy ¶
plot_histogram ¶
plot_histogram(title: str = 'Measurement Results', figsize: tuple[int, int] = (10, 6), max_outcomes: int = 20) -> plt.Figure
Plot measurement histogram
Parameters:
Name | Type | Description | Default |
---|---|---|---|
title
|
str
|
Plot title |
'Measurement Results'
|
figsize
|
tuple[int, int]
|
Figure size |
(10, 6)
|
max_outcomes
|
int
|
Maximum number of outcomes to show |
20
|
Returns:
Type | Description |
---|---|
Figure
|
Matplotlib figure |
Source code in src/superquantx/measurements.py
to_dict ¶
to_json ¶
from_dict
classmethod
¶
from_json
classmethod
¶
Quantum Measurement¶
superquantx.measurements.QuantumMeasurement ¶
Quantum measurement operations and analysis
Initialize measurement system
Parameters:
Name | Type | Description | Default |
---|---|---|---|
backend
|
str | None
|
Quantum backend for measurements |
'simulator'
|
Source code in src/superquantx/measurements.py
Functions¶
measure_circuit ¶
measure_circuit(circuit: QuantumCircuit, shots: int = 1024, memory: bool = False) -> MeasurementResult
Measure quantum circuit
Parameters:
Name | Type | Description | Default |
---|---|---|---|
circuit
|
QuantumCircuit
|
Quantum circuit to measure |
required |
shots
|
int
|
Number of measurement shots |
1024
|
memory
|
bool
|
Whether to store individual shot outcomes |
False
|
Returns:
Type | Description |
---|---|
MeasurementResult
|
Measurement result |
Source code in src/superquantx/measurements.py
measure_observable ¶
Measure expectation value of Pauli observable
Parameters:
Name | Type | Description | Default |
---|---|---|---|
circuit
|
QuantumCircuit
|
Quantum circuit (without measurements) |
required |
observable
|
str
|
Pauli string observable |
required |
shots
|
int
|
Number of shots |
1024
|
Returns:
Type | Description |
---|---|
float
|
Expectation value |
Source code in src/superquantx/measurements.py
tomography_measurements ¶
tomography_measurements(circuit: QuantumCircuit, qubits: list[int] | None = None, shots_per_measurement: int = 1024) -> dict[str, MeasurementResult]
Perform quantum state tomography measurements
Parameters:
Name | Type | Description | Default |
---|---|---|---|
circuit
|
QuantumCircuit
|
Quantum circuit to tomographically reconstruct |
required |
qubits
|
list[int] | None
|
Qubits to perform tomography on (default: all) |
None
|
shots_per_measurement
|
int
|
Shots per Pauli measurement |
1024
|
Returns:
Type | Description |
---|---|
dict[str, MeasurementResult]
|
Dictionary of measurement results for each Pauli basis |
Source code in src/superquantx/measurements.py
reconstruct_state ¶
Reconstruct quantum state from tomography measurements
Parameters:
Name | Type | Description | Default |
---|---|---|---|
tomography_results
|
dict[str, MeasurementResult]
|
Results from tomography_measurements |
required |
Returns:
Type | Description |
---|---|
ndarray
|
Reconstructed density matrix |
Source code in src/superquantx/measurements.py
fidelity ¶
Calculate quantum state fidelity
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state1
|
ndarray
|
First quantum state (vector or density matrix) |
required |
state2
|
ndarray
|
Second quantum state (vector or density matrix) |
required |
Returns:
Type | Description |
---|---|
float
|
Fidelity between states |
Source code in src/superquantx/measurements.py
trace_distance ¶
Calculate trace distance between quantum states
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state1
|
ndarray
|
First quantum state |
required |
state2
|
ndarray
|
Second quantum state |
required |
Returns:
Type | Description |
---|---|
float
|
Trace distance |
Source code in src/superquantx/measurements.py
quantum_volume ¶
quantum_volume(num_qubits: int, depth: int, trials: int = 100, shots_per_trial: int = 1024) -> dict[str, Any]
Perform quantum volume benchmark
Parameters:
Name | Type | Description | Default |
---|---|---|---|
num_qubits
|
int
|
Number of qubits |
required |
depth
|
int
|
Circuit depth |
required |
trials
|
int
|
Number of random circuits to test |
100
|
shots_per_trial
|
int
|
Shots per circuit |
1024
|
Returns:
Type | Description |
---|---|
dict[str, Any]
|
Quantum volume benchmark results |
Source code in src/superquantx/measurements.py
Result Analyzer¶
superquantx.measurements.ResultAnalyzer ¶
Advanced analysis of quantum measurement results
Functions¶
compare_results
staticmethod
¶
Compare two measurement results
Parameters:
Name | Type | Description | Default |
---|---|---|---|
results1
|
MeasurementResult
|
First measurement result |
required |
results2
|
MeasurementResult
|
Second measurement result |
required |
Returns:
Type | Description |
---|---|
dict[str, float]
|
Comparison metrics |
Source code in src/superquantx/measurements.py
error_mitigation_zero_noise_extrapolation
staticmethod
¶
error_mitigation_zero_noise_extrapolation(noise_levels: list[float], measurement_results: list[MeasurementResult], observable: str = 'Z') -> tuple[float, dict[str, Any]]
Perform zero-noise extrapolation error mitigation
Parameters:
Name | Type | Description | Default |
---|---|---|---|
noise_levels
|
list[float]
|
List of noise levels (e.g., [1, 2, 3]) |
required |
measurement_results
|
list[MeasurementResult]
|
Results for each noise level |
required |
observable
|
str
|
Observable to extrapolate |
'Z'
|
Returns:
Type | Description |
---|---|
tuple[float, dict[str, Any]]
|
Zero-noise extrapolated value and fitting info |
Source code in src/superquantx/measurements.py
readout_error_mitigation
staticmethod
¶
readout_error_mitigation(calibration_results: dict[str, MeasurementResult], measurement_result: MeasurementResult) -> MeasurementResult
Apply readout error mitigation
Parameters:
Name | Type | Description | Default |
---|---|---|---|
calibration_results
|
dict[str, MeasurementResult]
|
Results from measuring |0⟩ and |1⟩ states |
required |
measurement_result
|
MeasurementResult
|
Result to correct |
required |
Returns:
Type | Description |
---|---|
MeasurementResult
|
Error-mitigated result |
Source code in src/superquantx/measurements.py
Noise Models¶
Noise Channel Base¶
superquantx.noise.NoiseChannel ¶
Bases: ABC
Abstract base class for quantum noise channels
Initialize noise channel
Parameters:
Name | Type | Description | Default |
---|---|---|---|
probability
|
float
|
Noise probability (0 <= p <= 1) |
required |
Source code in src/superquantx/noise.py
Specific Noise Channels¶
superquantx.noise.BitFlipChannel ¶
Bases: NoiseChannel
Bit flip (X) noise channel
Source code in src/superquantx/noise.py
superquantx.noise.PhaseFlipChannel ¶
Bases: NoiseChannel
Phase flip (Z) noise channel
Source code in src/superquantx/noise.py
superquantx.noise.DepolarizingChannel ¶
Bases: NoiseChannel
Depolarizing noise channel
Source code in src/superquantx/noise.py
superquantx.noise.AmplitudeDampingChannel ¶
Bases: NoiseChannel
Amplitude damping noise channel (T1 decay)
Source code in src/superquantx/noise.py
Noise Model¶
superquantx.noise.NoiseModel ¶
Bases: BaseModel
Comprehensive noise model for quantum circuits
Functions¶
add_single_qubit_error ¶
add_two_qubit_error ¶
add_readout_error ¶
set_coherence_time ¶
Set T1 and T2 coherence times for qubit
Source code in src/superquantx/noise.py
apply_to_circuit ¶
Apply noise model to quantum circuit
Parameters:
Name | Type | Description | Default |
---|---|---|---|
circuit
|
QuantumCircuit
|
Original circuit |
required |
Returns:
Type | Description |
---|---|
QuantumCircuit
|
Noisy circuit with error channels |
Source code in src/superquantx/noise.py
from_device_properties
classmethod
¶
Create noise model from device properties
Parameters:
Name | Type | Description | Default |
---|---|---|---|
device_props
|
dict[str, Any]
|
Device property dictionary |
required |
Returns:
Type | Description |
---|---|
NoiseModel
|
Noise model based on device properties |
Source code in src/superquantx/noise.py
ideal
classmethod
¶
basic_device_noise
classmethod
¶
basic_device_noise(single_qubit_error: float = 0.001, two_qubit_error: float = 0.01, readout_error: float = 0.01) -> NoiseModel
Create basic device noise model
Parameters:
Name | Type | Description | Default |
---|---|---|---|
single_qubit_error
|
float
|
Single-qubit gate error rate |
0.001
|
two_qubit_error
|
float
|
Two-qubit gate error rate |
0.01
|
readout_error
|
float
|
Readout error rate |
0.01
|
Returns:
Type | Description |
---|---|
NoiseModel
|
Basic noise model |
Source code in src/superquantx/noise.py
Usage Examples¶
Basic Circuit Construction¶
import superquantx as sqx
import numpy as np
# Create quantum circuit
circuit = sqx.QuantumCircuit(n_qubits=3, n_classical=3)
# Add quantum gates
circuit.h(0) # Hadamard gate
circuit.cx(0, 1) # CNOT gate
circuit.ry(np.pi/4, 2) # Y-rotation
# Add measurements
circuit.measure(0, 0) # Measure qubit 0 to classical bit 0
circuit.measure_all() # Measure all qubits
print(circuit)
Advanced Gate Operations¶
from superquantx.gates import GateMatrix, PauliString
# Custom rotation gates
theta = np.pi/3
rx_gate = GateMatrix.rx(theta)
ry_gate = GateMatrix.ry(theta)
rz_gate = GateMatrix.rz(theta)
# Pauli string operations
pauli_str = PauliString('XYZX') # X⊗Y⊗Z⊗X
print(f"Pauli string: {pauli_str}")
print(f"Matrix shape: {pauli_str.to_matrix().shape}")
# Hamiltonian construction
from superquantx.gates import Hamiltonian, PauliString
# Create Heisenberg model Hamiltonian
hamiltonian = Hamiltonian.heisenberg_model(num_qubits=4, Jx=1.0, Jy=1.0, Jz=1.0)
print(f"Hamiltonian: {hamiltonian}")
# Time evolution
time_evolution_op = hamiltonian.time_evolution(time=0.1)
circuit.unitary(time_evolution_op, range(4))
Measurement Analysis¶
# Execute circuit and analyze results
backend = sqx.get_backend('simulator')
result = backend.execute_circuit(circuit, shots=1000)
# Create measurement result object
measurement = sqx.MeasurementResult(
counts=result['counts'],
shots=result['shots'],
metadata=result.get('metadata', {})
)
# Analyze measurements
print(f"Most frequent outcome: {measurement.most_frequent}")
print(f"Measurement probabilities: {measurement.probabilities}")
# Marginal analysis
marginal = measurement.marginal_counts([0, 1]) # Marginalize over qubits 0,1
print(f"Marginal counts: {marginal}")
# Statistical analysis
entropy = measurement.measurement_entropy()
print(f"Measurement entropy: {entropy:.4f}")
Expectation Value Calculations¶
from superquantx.measurements import QuantumMeasurement
from superquantx.gates import PauliString
# Create measurement system
measurement = QuantumMeasurement(backend="simulator")
# Define observable
observable = 'ZZ' # Z⊗Z measurement
# Calculate expectation value
exp_value = measurement.measure_observable(
circuit=circuit,
observable=observable,
shots=5000
)
print(f"⟨ZZ⟩ = {exp_value:.4f}")
# Multiple observables
observables = ['XX', 'YY', 'ZZ']
exp_values = []
for obs in observables:
val = measurement.measure_observable(circuit, obs, shots=5000)
exp_values.append(val)
print(f"⟨{obs}⟩ = {val:.4f}")
Quantum State Tomography¶
from superquantx.measurements import QuantumMeasurement
# Create measurement system
measurement = QuantumMeasurement(backend="simulator")
# Perform tomography measurements
tomography_results = measurement.tomography_measurements(
circuit=circuit,
qubits=[0, 1], # Reconstruct 2-qubit state
shots_per_measurement=1000
)
# Reconstruct density matrix
density_matrix = measurement.reconstruct_state(tomography_results)
print(f"Reconstructed density matrix:\n{density_matrix}")
# Calculate fidelity with target state
bell_state = np.array([1, 0, 0, 1]) / np.sqrt(2) # |Φ⁺⟩
fidelity = measurement.fidelity(density_matrix, bell_state)
print(f"Fidelity with |Φ⁺⟩: {fidelity:.4f}")
print(f"State purity: {np.trace(density_matrix @ density_matrix).real:.4f}")
Noise Modeling¶
from superquantx.noise import (
NoiseModel, BitFlipChannel, PhaseFlipChannel,
DepolarizingChannel, AmplitudeDampingChannel
)
# Create noise channels
bit_flip = BitFlipChannel(probability=0.01)
phase_flip = PhaseFlipChannel(probability=0.01)
depolarizing = DepolarizingChannel(probability=0.02)
amplitude_damping = AmplitudeDampingChannel(probability=0.05)
# Combine into noise model
noise_model = NoiseModel()
# Add gate-specific noise
noise_model.add_gate_noise('X', bit_flip)
noise_model.add_gate_noise('H', depolarizing)
noise_model.add_gate_noise('CNOT', phase_flip)
# Add readout noise
noise_model.add_readout_noise(
p0_given_1=0.02, # Probability of measuring 0 given |1⟩
p1_given_0=0.03 # Probability of measuring 1 given |0⟩
)
# Apply noise model to backend
noisy_backend = sqx.get_backend('simulator', noise_model=noise_model)
# Execute noisy simulation
noisy_result = noisy_backend.execute_circuit(circuit, shots=1000)
print("Noisy simulation results:", noisy_result['counts'])
Error Mitigation¶
from superquantx.measurements import ResultAnalyzer
# Zero-noise extrapolation
noise_levels = [1, 2, 3]
measurement_results = []
# Collect measurements at different noise levels
for noise_level in noise_levels:
# Create noisy backend (implementation dependent)
result = measurement.measure_circuit(circuit, shots=1000)
measurement_results.append(result)
# Perform extrapolation
zero_noise_value, fit_info = ResultAnalyzer.error_mitigation_zero_noise_extrapolation(
noise_levels=noise_levels,
measurement_results=measurement_results,
observable='Z'
)
print(f"Zero-noise extrapolated value: {zero_noise_value:.4f}")
print(f"Fit R²: {fit_info.get('r_squared', 'N/A'):.4f}")
# Readout error mitigation
calibration_results = {"0": result, "1": result} # Calibration measurements
corrected_result = ResultAnalyzer.readout_error_mitigation(
calibration_results=calibration_results,
measurement_result=result
)
print(f"Corrected counts: {corrected_result.counts}")
Circuit Optimization¶
from superquantx.circuits import CircuitOptimizer
# Create optimizer
optimizer = CircuitOptimizer(
optimization_level=2,
target_backend=backend
)
# Optimize circuit
optimized_circuit = optimizer.optimize(circuit)
print(f"Original circuit: {circuit.depth()} depth, {circuit.count_ops()} gates")
print(f"Optimized circuit: {optimized_circuit.depth()} depth, {optimized_circuit.count_ops()} gates")
# Specific optimizations
optimized_circuit = optimizer.apply_passes([
'RemoveRedundantGates',
'CombineRotations',
'CancelInverses',
'CommuteThroughClifford'
])
Parameterized Circuits¶
from superquantx.circuits import Parameter, ParameterVector
# Create parameters
theta = Parameter('theta')
phi_vec = ParameterVector('phi', 3)
# Build parameterized circuit
param_circuit = sqx.QuantumCircuit(3)
param_circuit.ry(theta, 0)
param_circuit.rx(phi_vec[0], 1)
param_circuit.rz(phi_vec[1], 2)
param_circuit.cx(0, 1)
param_circuit.cry(phi_vec[2], 1, 2)
# Bind parameters
bound_circuit = param_circuit.bind_parameters({
theta: np.pi/4,
phi_vec: [np.pi/3, np.pi/6, np.pi/2]
})
# Execute bound circuit
result = backend.execute_circuit(bound_circuit)
Quantum Circuit Libraries¶
from superquantx.circuits.library import (
EfficientSU2,
RealAmplitudes,
ZZFeatureMap,
PauliFeatureMap
)
# Variational ansatz circuits
ansatz1 = EfficientSU2(num_qubits=4, reps=3)
ansatz2 = RealAmplitudes(num_qubits=4, reps=2)
# Feature map circuits for quantum machine learning
feature_map1 = ZZFeatureMap(feature_dimension=4, reps=2)
feature_map2 = PauliFeatureMap(feature_dimension=4, reps=1)
# Combine feature map and ansatz
ml_circuit = feature_map1.compose(ansatz1)
# Bind training data
training_data = [0.1, 0.5, -0.3, 0.8]
bound_ml_circuit = ml_circuit.bind_parameters({
**feature_map1.parameter_dict(training_data),
**ansatz1.random_parameters()
})
Circuit Simulation and Debugging¶
from superquantx.circuits import CircuitSimulator
# Create detailed simulator
sim = CircuitSimulator(backend='statevector')
# Step-by-step execution
sim.initialize_circuit(circuit)
for step, gate in enumerate(circuit.data):
print(f"Step {step}: Applying {gate}")
# Apply gate
sim.apply_gate(gate)
# Get current state
current_state = sim.get_statevector()
print(f" Statevector norm: {np.linalg.norm(current_state):.6f}")
# Check entanglement
entanglement = sim.calculate_entanglement()
print(f" Entanglement entropy: {entanglement:.4f}")
# Final state analysis
final_state = sim.get_statevector()
final_density_matrix = sim.get_density_matrix()
print("Final state analysis:")
print(f" Purity: {np.trace(final_density_matrix @ final_density_matrix).real:.4f}")
print(f" Von Neumann entropy: {sim.von_neumann_entropy():.4f}")
Performance Optimization¶
Circuit Compilation¶
from superquantx.circuits import QuantumCompiler
# Create compiler for specific backend
compiler = QuantumCompiler(target_backend=backend)
# Compile circuit
compiled_circuit = compiler.compile(
circuit=circuit,
optimization_level=3,
scheduling='as_late_as_possible',
layout='dense'
)
# Analysis compilation results
print(f"Compilation report:")
print(f" Original gates: {circuit.count_ops()}")
print(f" Compiled gates: {compiled_circuit.count_ops()}")
print(f" Gate reduction: {(1 - compiled_circuit.count_ops()/circuit.count_ops())*100:.1f}%")
Batch Circuit Execution¶
# Execute multiple circuits efficiently
circuits = [create_random_circuit(n_qubits=4) for _ in range(10)]
# Parallel execution
results = backend.execute_circuits_parallel(
circuits=circuits,
shots=1000,
max_workers=4
)
# Batch analysis
success_rate = sum(1 for r in results if r['success']) / len(results)
avg_execution_time = np.mean([r.get('execution_time', 0) for r in results])
print(f"Batch execution: {success_rate*100:.1f}% success rate")
print(f"Average execution time: {avg_execution_time:.3f}s")
Best Practices¶
Circuit Construction¶
- Use Native Gates: Prefer gates supported by target backend
- Minimize Depth: Reduce circuit depth for better fidelity
- Optimize Layout: Consider qubit connectivity constraints
- Parameter Management: Use symbolic parameters for flexibility
Measurement Strategy¶
- Statistical Significance: Use sufficient shots for reliable statistics
- Marginal Analysis: Focus on relevant qubit subsets
- Error Bars: Always include measurement uncertainties
- Baseline Comparison: Compare with theoretical expectations
Noise Handling¶
- Realistic Models: Use device-specific noise parameters
- Error Mitigation: Apply appropriate mitigation techniques
- Validation: Compare noisy vs. noiseless simulations
- Calibration: Regularly update noise models from hardware data
For more detailed examples and tutorials, see: - Circuit Construction Tutorial - Noise Modeling Guide - Backend Integration