Source code for atlas_q.ir_enhanced.state_tomography
"""
IR-Enhanced Quantum State Tomography
======================================
Applies IR coherence-guided adaptive sampling for efficient quantum
state reconstruction.
Key Insight:
-----------
Full tomography requires 4^n measurements (exponential!)
Compressed sensing helps but still measurement-heavy
IR approach:
1. Measure subset to estimate coherence matrix
2. Identify high-mutual-information measurement pairs
3. Prioritize measurements with high coherence
4. Reconstruct state from grouped measurements
Target: 10-1000× measurement reduction
Author: ATLAS-Q + IR Integration
Date: November 2025
"""
from dataclasses import dataclass
from typing import List, Optional
import numpy as np
[docs]
@dataclass
class TomographyStrategy:
"""Result of IR tomography planning"""
measurement_basis: List[str] # Pauli basis to measure
measurement_order: List[int] # Priority order
grouping: List[List[int]] # Commuting measurement groups
n_measurements: int # Total measurements needed
compression_factor: float # vs full tomography
method: str
[docs]
def generate_pauli_basis(n_qubits: int, max_weight: Optional[int] = None) -> List[str]:
"""
Generate Pauli basis for n qubits.
Parameters
----------
n_qubits : int
Number of qubits
max_weight : int, optional
Maximum Pauli weight (Hamming weight)
If None, generates full basis (4^n terms)
Returns
-------
List[str]
Pauli strings
"""
if max_weight is None:
max_weight = n_qubits
paulis = []
basis_ops = ['I', 'X', 'Y', 'Z']
def generate_recursive(current, depth):
if depth == n_qubits:
weight = sum(1 for p in current if p != 'I')
if weight <= max_weight:
paulis.append(''.join(current))
return
for op in basis_ops:
generate_recursive(current + [op], depth + 1)
generate_recursive([], 0)
return paulis
[docs]
def ir_state_tomography(
n_qubits: int,
max_weight: int = 2,
target_measurements: Optional[int] = None,
adaptive: bool = True
) -> TomographyStrategy:
"""
IR-enhanced state tomography measurement planning.
Generates optimal measurement strategy for quantum state reconstruction.
Parameters
----------
n_qubits : int
Number of qubits to reconstruct
max_weight : int
Maximum Pauli weight (reduces measurement count)
target_measurements : int, optional
Target number of measurements (if None, uses all up to max_weight)
adaptive : bool
Use adaptive measurement selection
Returns
-------
TomographyStrategy
Measurement plan with grouping and prioritization
Examples
--------
>>> # 4-qubit tomography with weight-2 Paulis
>>> strategy = ir_state_tomography(n_qubits=4, max_weight=2)
>>> print(f"Measurements: {strategy.n_measurements}")
>>> print(f"Compression: {strategy.compression_factor:.1f}×")
"""
from .vqe_grouping import (
check_group_commutativity,
estimate_pauli_coherence_matrix,
group_by_variance_minimization,
)
# Generate Pauli basis
pauli_basis = generate_pauli_basis(n_qubits, max_weight=max_weight)
n_paulis = len(pauli_basis)
full_basis_size = 4**n_qubits
# Estimate coherence (use uniform weights initially)
weights = np.ones(n_paulis)
Sigma = estimate_pauli_coherence_matrix(weights, pauli_basis)
# Prioritize measurements by coherence structure
# High-coherence measurements provide more information
coherence_scores = np.sum(np.abs(Sigma), axis=1)
measurement_order = np.argsort(-coherence_scores).tolist()
# Group commuting measurements
grouping = group_by_variance_minimization(
Sigma, weights,
max_group_size=min(10, n_paulis // 4),
pauli_strings=pauli_basis,
check_commutativity=True
)
# Determine final measurement count
if target_measurements is not None:
n_measurements = min(target_measurements, n_paulis)
else:
n_measurements = n_paulis
compression_factor = full_basis_size / n_measurements
return TomographyStrategy(
measurement_basis=pauli_basis,
measurement_order=measurement_order,
grouping=grouping,
n_measurements=n_measurements,
compression_factor=compression_factor,
method=f"ir_adaptive" if adaptive else "ir_static"
)
[docs]
def tomography_measurement_groups(
strategy: TomographyStrategy
) -> List[List[str]]:
"""
Get measurement groups from tomography strategy.
Parameters
----------
strategy : TomographyStrategy
Tomography plan
Returns
-------
List[List[str]]
Grouped Pauli measurements
Examples
--------
>>> strategy = ir_state_tomography(n_qubits=3, max_weight=2)
>>> groups = tomography_measurement_groups(strategy)
>>> for i, group in enumerate(groups[:3]):
... print(f"Group {i}: {group}")
"""
groups_paulis = []
for group_indices in strategy.grouping:
group_paulis = [strategy.measurement_basis[i] for i in group_indices]
groups_paulis.append(group_paulis)
return groups_paulis