quantrs2-sim 0.1.3

Quantum circuit simulators for the QuantRS2 framework
Documentation
//! Auto-generated module
//!
//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)

use crate::error::{Result, SimulatorError};
use scirs2_core::ndarray::{
    s, Array1, Array2, ArrayView1, ArrayView2, ArrayViewMut1, ArrayViewMut2,
};
use scirs2_core::random::prelude::*;
use scirs2_core::Complex64;
use std::collections::HashMap;

#[cfg(feature = "advanced_math")]
use super::types::{AdvancedLinearAlgebra, SparseSolvers};
use super::types::{FftEngine, Matrix, MemoryPool, SparseMatrix, Vector};

/// Performance benchmarking for `SciRS2` integration
pub fn benchmark_scirs2_integration() -> Result<HashMap<String, f64>> {
    let mut results = HashMap::new();
    #[cfg(feature = "advanced_math")]
    {
        let start = std::time::Instant::now();
        let engine = FftEngine::new();
        let test_vector = Vector::from_array1(
            &Array1::from_vec((0..1024).map(|i| Complex64::new(i as f64, 0.0)).collect()).view(),
            &MemoryPool::new(),
        )?;
        for _ in 0..100 {
            let _ = engine.forward(&test_vector)?;
        }
        let fft_time = start.elapsed().as_millis() as f64;
        results.insert("fft_1024_100_iterations".to_string(), fft_time);
    }
    #[cfg(feature = "advanced_math")]
    {
        let start = std::time::Instant::now();
        let mut row_indices = vec![0usize; 1000];
        let mut col_indices = vec![0usize; 1000];
        let mut values = vec![Complex64::new(0.0, 0.0); 1000];
        for i in 0..100 {
            for j in 0..10 {
                let idx = i * 10 + j;
                row_indices[idx] = i;
                col_indices[idx] = (i + j) % 100;
                values[idx] = Complex64::new(1.0, 0.0);
            }
        }
        let sparse_matrix =
            SparseMatrix::from_triplets(values, row_indices, col_indices, (100, 100))?;
        let b = Vector::from_array1(&Array1::ones(100).view(), &MemoryPool::new())?;
        let _ = SparseSolvers::conjugate_gradient(&sparse_matrix, &b, None, 1e-6, 100)?;
        let sparse_solver_time = start.elapsed().as_millis() as f64;
        results.insert("cg_solver_100x100".to_string(), sparse_solver_time);
    }
    #[cfg(feature = "advanced_math")]
    {
        let start = std::time::Instant::now();
        let test_matrix = Matrix::from_array2(&Array2::eye(50).view(), &MemoryPool::new())?;
        for _ in 0..10 {
            let _ = AdvancedLinearAlgebra::qr_decomposition(&test_matrix)?;
        }
        let qr_time = start.elapsed().as_millis() as f64;
        results.insert("qr_decomposition_50x50_10_iterations".to_string(), qr_time);
    }
    Ok(results)
}