use super::config::SciRS2ProcessTomographyConfig;
use scirs2_core::ndarray::{Array1, Array2, Array3, Array4};
use scirs2_core::Complex64;
use std::collections::HashMap;
use std::time::{Duration, SystemTime};
pub type DistributionType = String;
#[derive(Debug, Clone)]
pub struct SciRS2ProcessTomographyResult {
pub device_id: String,
pub config: SciRS2ProcessTomographyConfig,
pub process_matrix: Array4<Complex64>,
pub pauli_transfer_matrix: Array2<f64>,
pub statistical_analysis: ProcessStatisticalAnalysis,
pub process_metrics: ProcessMetrics,
pub validation_results: ProcessValidationResults,
pub structure_analysis: Option<ProcessStructureAnalysis>,
pub uncertainty_quantification: ProcessUncertaintyQuantification,
pub process_comparisons: ProcessComparisons,
}
#[derive(Debug, Clone)]
pub struct ProcessStatisticalAnalysis {
pub reconstruction_quality: ReconstructionQuality,
pub statistical_tests: HashMap<String, StatisticalTest>,
pub distribution_analysis: DistributionAnalysis,
pub correlation_analysis: CorrelationAnalysis,
}
#[derive(Debug, Clone)]
pub struct ProcessMetrics {
pub process_fidelity: f64,
pub average_gate_fidelity: f64,
pub unitarity: f64,
pub entangling_power: f64,
pub non_unitality: f64,
pub channel_capacity: f64,
pub coherent_information: f64,
pub diamond_norm_distance: f64,
pub process_spectrum: Array1<f64>,
}
#[derive(Debug, Clone)]
pub struct ProcessValidationResults {
pub cross_validation: Option<CrossValidationResults>,
pub bootstrap_results: Option<BootstrapResults>,
pub benchmark_results: Option<BenchmarkResults>,
pub model_selection: ModelSelectionResults,
}
#[derive(Debug, Clone)]
pub struct ProcessStructureAnalysis {
pub kraus_decomposition: KrausDecomposition,
pub noise_decomposition: NoiseDecomposition,
pub coherence_analysis: CoherenceAnalysis,
pub symmetry_analysis: SymmetryAnalysis,
pub process_graph: ProcessGraph,
}
#[derive(Debug, Clone)]
pub struct ProcessUncertaintyQuantification {
pub confidence_intervals: Array4<(f64, f64)>,
pub bootstrap_uncertainty: Array4<f64>,
pub fisher_information: Array2<f64>,
}
#[derive(Debug, Clone)]
pub struct ProcessComparisons {
pub standard_process_fidelities: HashMap<String, f64>,
pub process_distances: HashMap<String, f64>,
pub model_selection_scores: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct ReconstructionQuality {
pub log_likelihood: f64,
pub physical_validity: PhysicalValidityMetrics,
pub condition_number: f64,
}
#[derive(Debug, Clone)]
pub struct PhysicalValidityMetrics {
pub is_completely_positive: bool,
pub is_trace_preserving: bool,
pub positivity_measure: f64,
pub trace_preservation_measure: f64,
}
#[derive(Debug, Clone)]
pub struct StatisticalTest {
pub statistic: f64,
pub p_value: f64,
pub critical_value: f64,
pub is_significant: bool,
pub effect_size: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct DistributionAnalysis {
pub element_distributions: HashMap<String, ElementDistribution>,
pub global_properties: GlobalDistributionProperties,
}
#[derive(Debug, Clone)]
pub struct ElementDistribution {
pub distribution_type: DistributionType,
pub parameters: Vec<f64>,
pub goodness_of_fit: f64,
pub confidence_interval: (f64, f64),
}
#[derive(Debug, Clone)]
pub struct GlobalDistributionProperties {
pub skewness: f64,
pub kurtosis: f64,
pub entropy: f64,
}
#[derive(Debug, Clone)]
pub struct CorrelationAnalysis {
pub element_correlations: HashMap<String, f64>,
pub principal_components: Array2<f64>,
pub correlation_network: CorrelationNetwork,
}
#[derive(Debug, Clone)]
pub struct CorrelationNetwork {
pub adjacency_matrix: Array2<f64>,
pub centrality_measures: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct CrossValidationResults {
pub fold_scores: Vec<f64>,
pub mean_score: f64,
pub std_score: f64,
pub confidence_interval: (f64, f64),
}
#[derive(Debug, Clone)]
pub struct BootstrapResults {
pub bootstrap_samples: Vec<ProcessMetrics>,
pub confidence_intervals: HashMap<String, (f64, f64)>,
pub bias_estimates: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct BenchmarkResults {
pub benchmark_scores: HashMap<String, f64>,
pub rankings: HashMap<String, usize>,
}
#[derive(Debug, Clone)]
pub struct ModelSelectionResults {
pub aic_scores: HashMap<String, f64>,
pub bic_scores: HashMap<String, f64>,
pub cross_validation_scores: HashMap<String, f64>,
pub best_model: String,
pub model_weights: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct KrausDecomposition {
pub kraus_operators: Vec<Array2<Complex64>>,
pub decomposition_fidelity: f64,
pub rank: usize,
}
#[derive(Debug, Clone)]
pub struct NoiseDecomposition {
pub coherent_error: Array2<Complex64>,
pub incoherent_errors: HashMap<String, f64>,
pub total_error_strength: f64,
}
#[derive(Debug, Clone)]
pub struct CoherenceAnalysis {
pub coherence_measures: HashMap<String, f64>,
pub decoherence_times: HashMap<String, f64>,
pub coherence_matrix: Array2<f64>,
}
#[derive(Debug, Clone)]
pub struct SymmetryAnalysis {
pub symmetries: Vec<String>,
pub symmetry_violations: HashMap<String, f64>,
pub preservation_scores: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct ProcessGraph {
pub adjacency_matrix: Array2<f64>,
pub node_properties: Vec<NodeProperties>,
pub graph_metrics: GraphMetrics,
}
#[derive(Debug, Clone)]
pub struct NodeProperties {
pub index: usize,
pub strength: f64,
pub clustering_coefficient: f64,
pub betweenness_centrality: f64,
}
#[derive(Debug, Clone)]
pub struct GraphMetrics {
pub num_nodes: usize,
pub num_edges: usize,
pub density: f64,
pub average_clustering: f64,
pub average_path_length: f64,
}
#[derive(Debug, Clone)]
pub struct ExperimentalData {
pub input_states: Vec<Array2<Complex64>>,
pub measurement_operators: Vec<Array2<Complex64>>,
pub measurement_results: Vec<f64>,
pub measurement_uncertainties: Vec<f64>,
}
#[derive(Debug, Clone)]
pub struct ProcessAnomalyDetector {
pub historical_data: Vec<ProcessMetrics>,
pub threshold: f64,
pub algorithm: AnomalyDetectionAlgorithm,
}
#[derive(Debug, Clone)]
pub enum AnomalyDetectionAlgorithm {
StatisticalThreshold,
IsolationForest,
OneClassSVM,
LocalOutlierFactor,
}
#[derive(Debug, Clone)]
pub struct ProcessDriftDetector {
pub reference_metrics: ProcessMetrics,
pub sensitivity: f64,
pub method: DriftDetectionMethod,
}
#[derive(Debug, Clone)]
pub enum DriftDetectionMethod {
StatisticalTest,
ChangePointDetection,
KLDivergence,
WassersteinDistance,
}
#[derive(Debug, Clone)]
pub struct ProcessMonitoringResult {
pub current_metrics: ProcessMetrics,
pub experimental_conditions: ExperimentalConditions,
pub anomaly_score: f64,
pub drift_indicator: f64,
pub alert_level: AlertLevel,
}
#[derive(Debug, Clone)]
pub struct ExperimentalConditions {
pub temperature: Option<f64>,
pub noise_level: f64,
pub calibration_age: Duration,
pub gate_count: usize,
pub circuit_depth: usize,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AlertLevel {
Normal,
Warning,
Critical,
}
impl Default for ProcessMetrics {
fn default() -> Self {
Self {
process_fidelity: 1.0,
average_gate_fidelity: 1.0,
unitarity: 1.0,
entangling_power: 0.0,
non_unitality: 0.0,
channel_capacity: 1.0,
coherent_information: 1.0,
diamond_norm_distance: 0.0,
process_spectrum: Array1::ones(2),
}
}
}
impl Default for StatisticalTest {
fn default() -> Self {
Self {
statistic: 0.0,
p_value: 1.0,
critical_value: 0.0,
is_significant: false,
effect_size: None,
}
}
}
impl Default for ElementDistribution {
fn default() -> Self {
Self {
distribution_type: "normal".to_string(),
parameters: vec![0.0, 1.0],
goodness_of_fit: 1.0,
confidence_interval: (0.0, 1.0),
}
}
}
impl Default for GlobalDistributionProperties {
fn default() -> Self {
Self {
skewness: 0.0,
kurtosis: 0.0,
entropy: 1.0,
}
}
}
impl Default for CorrelationNetwork {
fn default() -> Self {
Self {
adjacency_matrix: Array2::zeros((2, 2)),
centrality_measures: HashMap::new(),
}
}
}
impl Default for GraphMetrics {
fn default() -> Self {
Self {
num_nodes: 0,
num_edges: 0,
density: 0.0,
average_clustering: 0.0,
average_path_length: 0.0,
}
}
}