Skip to main content

quantrs2_sim/scirs2_integration/
functions.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use crate::error::{Result, SimulatorError};
6use scirs2_core::ndarray::{
7    s, Array1, Array2, ArrayView1, ArrayView2, ArrayViewMut1, ArrayViewMut2,
8};
9use scirs2_core::random::prelude::*;
10use scirs2_core::Complex64;
11use std::collections::HashMap;
12
13#[cfg(feature = "advanced_math")]
14use super::types::{AdvancedLinearAlgebra, SparseSolvers};
15use super::types::{FftEngine, Matrix, MemoryPool, SparseMatrix, Vector};
16
17/// Performance benchmarking for `SciRS2` integration
18pub fn benchmark_scirs2_integration() -> Result<HashMap<String, f64>> {
19    let mut results = HashMap::new();
20    #[cfg(feature = "advanced_math")]
21    {
22        let start = std::time::Instant::now();
23        let engine = FftEngine::new();
24        let test_vector = Vector::from_array1(
25            &Array1::from_vec((0..1024).map(|i| Complex64::new(i as f64, 0.0)).collect()).view(),
26            &MemoryPool::new(),
27        )?;
28        for _ in 0..100 {
29            let _ = engine.forward(&test_vector)?;
30        }
31        let fft_time = start.elapsed().as_millis() as f64;
32        results.insert("fft_1024_100_iterations".to_string(), fft_time);
33    }
34    #[cfg(feature = "advanced_math")]
35    {
36        let start = std::time::Instant::now();
37        let mut row_indices = vec![0usize; 1000];
38        let mut col_indices = vec![0usize; 1000];
39        let mut values = vec![Complex64::new(0.0, 0.0); 1000];
40        for i in 0..100 {
41            for j in 0..10 {
42                let idx = i * 10 + j;
43                row_indices[idx] = i;
44                col_indices[idx] = (i + j) % 100;
45                values[idx] = Complex64::new(1.0, 0.0);
46            }
47        }
48        let sparse_matrix =
49            SparseMatrix::from_triplets(values, row_indices, col_indices, (100, 100))?;
50        let b = Vector::from_array1(&Array1::ones(100).view(), &MemoryPool::new())?;
51        let _ = SparseSolvers::conjugate_gradient(&sparse_matrix, &b, None, 1e-6, 100)?;
52        let sparse_solver_time = start.elapsed().as_millis() as f64;
53        results.insert("cg_solver_100x100".to_string(), sparse_solver_time);
54    }
55    #[cfg(feature = "advanced_math")]
56    {
57        let start = std::time::Instant::now();
58        let test_matrix = Matrix::from_array2(&Array2::eye(50).view(), &MemoryPool::new())?;
59        for _ in 0..10 {
60            let _ = AdvancedLinearAlgebra::qr_decomposition(&test_matrix)?;
61        }
62        let qr_time = start.elapsed().as_millis() as f64;
63        results.insert("qr_decomposition_50x50_10_iterations".to_string(), qr_time);
64    }
65    Ok(results)
66}