use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct SciRS2ProcessTomographyConfig {
pub num_input_states: usize,
pub shots_per_state: usize,
pub reconstruction_method: ReconstructionMethod,
pub confidence_level: f64,
pub enable_compressed_sensing: bool,
pub enable_mle: bool,
pub enable_bayesian: bool,
pub enable_structure_analysis: bool,
pub enable_multi_process: bool,
pub optimization_config: OptimizationConfig,
pub validation_config: ProcessValidationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ReconstructionMethod {
LinearInversion,
MaximumLikelihood,
CompressedSensing,
BayesianInference,
EnsembleMethods,
MachineLearning,
}
#[derive(Debug, Clone)]
pub struct OptimizationConfig {
pub max_iterations: usize,
pub tolerance: f64,
pub algorithm: OptimizationAlgorithm,
pub enable_parallel: bool,
pub adaptive_step_size: bool,
pub regularization: RegularizationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OptimizationAlgorithm {
LBFGS,
ConjugateGradient,
TrustRegion,
DifferentialEvolution,
SimulatedAnnealing,
GeneticAlgorithm,
ParticleSwarm,
}
#[derive(Debug, Clone)]
pub struct RegularizationConfig {
pub l1_strength: f64,
pub l2_strength: f64,
pub trace_strength: f64,
pub positivity_strength: f64,
}
#[derive(Debug, Clone)]
pub struct ProcessValidationConfig {
pub enable_cross_validation: bool,
pub cv_folds: usize,
pub enable_bootstrap: bool,
pub bootstrap_samples: usize,
pub enable_benchmarking: bool,
pub benchmark_processes: Vec<String>,
}
impl Default for SciRS2ProcessTomographyConfig {
fn default() -> Self {
Self {
num_input_states: 36, shots_per_state: 10000,
reconstruction_method: ReconstructionMethod::MaximumLikelihood,
confidence_level: 0.95,
enable_compressed_sensing: true,
enable_mle: true,
enable_bayesian: false,
enable_structure_analysis: true,
enable_multi_process: false,
optimization_config: OptimizationConfig::default(),
validation_config: ProcessValidationConfig::default(),
}
}
}
impl Default for OptimizationConfig {
fn default() -> Self {
Self {
max_iterations: 1000,
tolerance: 1e-8,
algorithm: OptimizationAlgorithm::LBFGS,
enable_parallel: true,
adaptive_step_size: true,
regularization: RegularizationConfig::default(),
}
}
}
impl Default for RegularizationConfig {
fn default() -> Self {
Self {
l1_strength: 0.001,
l2_strength: 0.01,
trace_strength: 1000.0,
positivity_strength: 100.0,
}
}
}
impl Default for ProcessValidationConfig {
fn default() -> Self {
Self {
enable_cross_validation: true,
cv_folds: 5,
enable_bootstrap: true,
bootstrap_samples: 100,
enable_benchmarking: true,
benchmark_processes: vec![
"identity".to_string(),
"pauli_x".to_string(),
"pauli_y".to_string(),
"pauli_z".to_string(),
"hadamard".to_string(),
],
}
}
}