quantrs2_sim/scirs2_integration/
functions.rs1use 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
17pub 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}