Skip to content

Testing Strategy

The QSCI testing framework ensures correctness, stability, and performance across multiple layers of the application. Our comprehensive testing approach validates all algorithm variants against exact solutions while achieving machine precision accuracy.

Testing Philosophy

Core Principles

  • Correctness: Verifying algorithm results against known ground truths from exact diagonalization
  • Robustness: Ensuring consistent behavior across diverse Hamiltonians and system parameters
  • Integration: Confirming seamless operation with QURI ecosystem components
  • Regression: Preventing re-introduction of fixed bugs through comprehensive testing
  • Precision: Validating that optimal state preparation achieves machine precision accuracy

Key Innovation: Uniform Superposition Breakthrough

Our testing framework discovered that uniform superposition states (H⊗H⊗...⊗H) combined with complete subspace coverage provides optimal QSCI performance:

def create_uniform_superposition(n_qubits: int) -> GeneralCircuitQuantumState:
    """Create uniform superposition state for perfect QSCI sampling."""
    circuit = QuantumCircuit(n_qubits)

    # Apply Hadamard gates to all qubits for uniform superposition
    for i in range(n_qubits):
        circuit.add_H_gate(i)

    return GeneralCircuitQuantumState(n_qubits, circuit)

Results: All QSCI variants achieve machine precision (< 1e-15) with this approach.

Test Architecture

Directory Structure

tests/
├── exact_diagonalizations/            # Primary validation tests
│   ├── test_exact_ground_state_precision.py   # Uniform superposition precision
│   ├── test_te_qsci_single_time.py           # SingleTimeTE_QSCI validation
│   ├── test_te_qsci_time_average.py          # TimeAverageTE_QSCI validation
│   ├── test_te_qsci_state_vector.py          # StateVectorTE_QSCI validation
│   ├── test_initial_state_comparison.py      # Initial state strategy analysis
│   └── conftest.py                           # ED-specific fixtures
├── utils/                             # Test utilities and factories
│   ├── hamiltonian_factory.py        # Test Hamiltonian creation
│   ├── exact_ground_state_utils.py   # State preparation utilities
│   ├── conversion_utils.py           # Framework conversion helpers
│   └── universal_qsci_tester.py      # Common testing patterns
├── test_qsci_verification.py         # Mathematical validation
├── test_qsci_core.py                 # Unit tests and regression tests
├── test_qsci_integrations.py         # Framework integration tests
├── test_qsci_real_integration.py     # End-to-end molecular tests
└── conftest.py                       # Global test configuration

Test Categories

1. Exact Diagonalization Tests

Primary Validation Layer - Tests all QSCI variants against exact solutions

Key Features: - Machine precision validation (1e-8 tolerance) - Complete subspace coverage for deterministic results - Comprehensive Hamiltonian coverage - All algorithm variants tested

Test Systems:

test_systems = {
    'simple_2x2': {
        'n_qubits': 1,
        'hamiltonian': create_simple_2x2_hamiltonian(),
        'exact_energy': -1.0
    },
    'pauli_2q': {
        'n_qubits': 2, 
        'hamiltonian': create_pauli_hamiltonian(),
        'exact_energy': -2.75
    },
    'tfim_critical': {
        'n_qubits': 2,
        'hamiltonian': create_tfim_hamiltonian(2, h=1.0),
        'exact_energy': -2.0
    }
}

2. Algorithm-Specific Tests

VanillaQSCI Tests

@pytest.mark.exact_ground_state_precision
def test_vanilla_qsci_uniform_superposition_precision():
    """Test VanillaQSCI achieves machine precision with uniform superposition."""
    # Create uniform superposition state
    uniform_state = create_uniform_superposition(n_qubits=2)

    # Run with complete subspace coverage
    qsci = VanillaQSCI(
        hamiltonian=hamiltonian,
        sampler=sampler,
        num_states_pick_out=2**2  # Complete subspace
    )

    result = qsci.run([uniform_state], total_shots=2500)

    # Validate machine precision
    energy_error = abs(result.ground_state_energy - exact_energy)
    assert energy_error < 1e-8

TE-QSCI Variant Tests

  • SingleTimeTE_QSCI: Evolution time parameter sweeps
  • TimeAverageTE_QSCI: Multiple time point convergence analysis
  • StateVectorTE_QSCI: Direct state vector processing validation

3. Initial State Comparison Tests

Purpose: Empirical validation of optimal initial state selection strategies

Key Comparisons: - Hartree-Fock vs uniform superposition states - Measurement outcome diversity analysis - Cross-algorithm robustness validation

Results Summary:

initial_state_performance = {
    'uniform_superposition': {
        'precision': '< 1e-15',
        'diversity_ratio': 1.0,
        'recommended': True
    },
    'hartree_fock': {
        'precision': '~0.1-1.0', 
        'diversity_ratio': 0.3,
        'recommended': False
    },
    'computational_basis': {
        'precision': '~0.5-2.0',
        'diversity_ratio': 0.0,
        'recommended': False
    }
}

Test Execution

Running Tests

# Full test suite
pytest

# Exact diagonalization tests only
pytest tests/exact_diagonalizations/

# Specific algorithm variant
pytest -m te_qsci_single_time

# With verbose output
pytest -v

# Performance optimized (exclude slow tests)
pytest -m "not molecular"

# With coverage report
pytest --cov=src

Test Markers

# Algorithm-specific markers
@pytest.mark.exact_ground_state_precision   # Uniform superposition precision tests
@pytest.mark.te_qsci_single_time            # Single-time TE-QSCI tests
@pytest.mark.te_qsci_time_average           # Time-average TE-QSCI tests
@pytest.mark.te_qsci_state_vector           # State vector TE-QSCI tests
@pytest.mark.initial_state_comparison       # Initial state comparison tests

# Category markers
@pytest.mark.exact_diagonalization          # Tests using exact diagonalization
@pytest.mark.verification                   # Ground truth validation
@pytest.mark.integration                    # Framework integration
@pytest.mark.molecular                      # Molecular systems (may be slow)
@pytest.mark.regression                     # Specific bug regression tests

Test Design Patterns

Complete Subspace Coverage

Principle: For exact validation, use complete subspace coverage

# For n-qubit systems
num_states_pick_out = 2**n_qubits  # Complete Hilbert space

Benefits: - Eliminates sampling bias - Enables machine precision accuracy
- Provides deterministic results

Robust Tolerance Handling

Different tolerances for different test types:

tolerance_settings = {
    'machine_precision': 1e-8,      # Uniform superposition tests
    'comparative': 0.2,             # Cross-method comparisons
    'molecular': 1e-3,              # Molecular system validation
    'integration': 1e-6             # Framework integration tests
}

Statistical Robustness

Shot count optimization:

shot_counts = {
    'standard_tests': 2000,         # Basic validation
    'te_qsci_tests': 3000,         # TE-QSCI variants
    'statistical_analysis': 5000,   # Variance studies
    'molecular_systems': 10000      # Large molecule studies
}

Test Utilities

Hamiltonian Factory

Provides standardized test Hamiltonians:

# Available Hamiltonian types
hamiltonians = {
    'simple_2x2': create_simple_2x2_hamiltonian(),
    'pauli': create_pauli_hamiltonian(),
    'tfim': create_tfim_hamiltonian(n_qubits, h_field),
    'heisenberg': create_heisenberg_hamiltonian(n_qubits, jz, jxy),
    'random_sparse': create_random_sparse_hamiltonian(n_qubits, density),
    'molecular_h2': get_h2_hamiltonian_minimal_basis()
}

State Preparation Utilities

# Optimal state preparation
uniform_state = create_uniform_superposition(n_qubits)

# Validation utilities  
validate_state_preparation(state, target_fidelity=1.0)
compare_preparation_methods(states_dict)

Exact Solution Utilities

# Get exact eigenvalues/eigenvectors
exact_eigenvalues, exact_eigenvectors = get_exact_solution(
    hamiltonian_matrix, num_states=k
)

# Validate Hamiltonian properties
properties = validate_sparse_hamiltonian_properties(hamiltonian)
assert properties['is_valid_hamiltonian']

Performance Metrics

Test Suite Statistics

  • Total Tests: 41 exact diagonalization tests + core test suite
  • Success Rate: 100% (41/41 exact diagonalization tests passing)
  • Precision Achievement: Machine precision (< 1e-15) for uniform superposition
  • Coverage: All QSCI variants validated against exact diagonalization
  • Execution Time: Complete test suite runs in under 5 minutes

Key Validation Achievements

Uniform superposition + complete subspace = machine precision accuracy
All QSCI variants validated (Vanilla, SingleTime TE-QSCI, TimeAverage TE-QSCI, StateVector TE-QSCI)
Comprehensive Hamiltonian coverage (Pauli, TFIM, Heisenberg, random sparse)
Robust numerical precision handling and edge case management
Empirical validation of optimal initial state selection strategies

Best Practices

Writing New Tests

  1. Use uniform superposition for precision validation tests
  2. Apply complete subspace coverage where appropriate (2**n_qubits)
  3. Set appropriate tolerances based on test type
  4. Include proper test markers for categorization
  5. Document test purpose clearly in docstrings
  6. Handle edge cases including numerical precision issues

Test Validation Checklist

  • [ ] Tests use uniform superposition for precision validation
  • [ ] Complete subspace coverage applied (2**n_qubits)
  • [ ] Appropriate shot counts (2000-3000) for statistical robustness
  • [ ] Proper tolerance settings (1e-8 for precision, looser for comparative)
  • [ ] Tests properly categorized with pytest markers
  • [ ] Edge cases and numerical precision issues handled
  • [ ] Test documentation clearly explains validation approach

Contributing to Tests

When adding new tests:

  1. Follow existing patterns - place tests in appropriate files
  2. Use test utilities - leverage hamiltonian_factory and other utilities
  3. Document thoroughly - explain what the test validates
  4. Test the tests - ensure new tests catch intended issues
  5. Update documentation - add new test categories to docs

For questions about the testing framework, refer to existing tests as examples or consult the Test Utilities documentation.