use std::time::Duration;
#[derive(Debug, Clone)]
pub struct UniversalCompilerConfig {
pub auto_platform_discovery: bool,
pub optimization_level: OptimizationLevel,
pub allocation_strategy: ResourceAllocationStrategy,
pub cost_constraints: CostConstraints,
pub performance_requirements: PerformanceRequirements,
pub error_correction: ErrorCorrectionRequirements,
pub scheduling_preferences: SchedulingPreferences,
}
impl Default for UniversalCompilerConfig {
fn default() -> Self {
Self {
auto_platform_discovery: true,
optimization_level: OptimizationLevel::Aggressive,
allocation_strategy: ResourceAllocationStrategy::CostEffective,
cost_constraints: CostConstraints::default(),
performance_requirements: PerformanceRequirements::default(),
error_correction: ErrorCorrectionRequirements::default(),
scheduling_preferences: SchedulingPreferences::default(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum OptimizationLevel {
None,
Basic,
Standard,
Aggressive,
Maximum,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ResourceAllocationStrategy {
CostOptimal,
PerformanceOptimal,
CostEffective,
TimeOptimal,
ReliabilityOptimal,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct CostConstraints {
pub max_total_cost: Option<f64>,
pub max_cost_per_job: Option<f64>,
pub cost_target: CostTarget,
pub budget_allocation: BudgetAllocation,
}
impl Default for CostConstraints {
fn default() -> Self {
Self {
max_total_cost: Some(1000.0),
max_cost_per_job: Some(100.0),
cost_target: CostTarget::Minimize,
budget_allocation: BudgetAllocation::Balanced,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum CostTarget {
Minimize,
BudgetConstrained,
EfficiencyOptimal,
PerformancePerDollar,
}
#[derive(Debug, Clone, PartialEq)]
pub enum BudgetAllocation {
Equal,
PerformanceWeighted,
PriorityBased,
Balanced,
}
#[derive(Debug, Clone)]
pub struct PerformanceRequirements {
pub max_execution_time: Option<Duration>,
pub min_solution_quality: f64,
pub required_success_probability: f64,
pub performance_guarantees: Vec<PerformanceGuarantee>,
}
impl Default for PerformanceRequirements {
fn default() -> Self {
Self {
max_execution_time: Some(Duration::from_secs(3600)),
min_solution_quality: 0.8,
required_success_probability: 0.9,
performance_guarantees: vec![],
}
}
}
#[derive(Debug, Clone)]
pub enum PerformanceGuarantee {
TimeBound { max_time: Duration, confidence: f64 },
QualityGuarantee { min_quality: f64, confidence: f64 },
AvailabilityGuarantee {
uptime: f64,
measurement_window: Duration,
},
ScalabilityGuarantee {
max_problem_size: usize,
performance_degradation: f64,
},
}
#[derive(Debug, Clone)]
pub struct ErrorCorrectionRequirements {
pub enable_error_correction: bool,
pub strategy: ErrorCorrectionStrategy,
pub error_threshold: f64,
pub redundancy_level: RedundancyLevel,
}
impl Default for ErrorCorrectionRequirements {
fn default() -> Self {
Self {
enable_error_correction: true,
strategy: ErrorCorrectionStrategy::Automatic,
error_threshold: 0.01,
redundancy_level: RedundancyLevel::Medium,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ErrorCorrectionStrategy {
None,
Basic,
Advanced,
Automatic,
HardwareOptimized,
}
#[derive(Debug, Clone, PartialEq)]
pub enum RedundancyLevel {
Minimal,
Low,
Medium,
High,
Maximum,
}
#[derive(Debug, Clone)]
pub struct SchedulingPreferences {
pub priority: SchedulingPriority,
pub resource_preferences: ResourcePreferences,
pub geographic_preferences: GeographicPreferences,
}
impl Default for SchedulingPreferences {
fn default() -> Self {
Self {
priority: SchedulingPriority::Normal,
resource_preferences: ResourcePreferences::default(),
geographic_preferences: GeographicPreferences::default(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum SchedulingPriority {
Low,
Normal,
High,
Critical,
}
#[derive(Debug, Clone)]
pub struct ResourcePreferences {
pub preferred_platforms: Vec<super::platform::QuantumPlatform>,
pub min_qubits: usize,
pub max_qubits: Option<usize>,
}
impl Default for ResourcePreferences {
fn default() -> Self {
Self {
preferred_platforms: vec![],
min_qubits: 1,
max_qubits: None,
}
}
}
#[derive(Debug, Clone)]
pub struct GeographicPreferences {
pub preferred_regions: Vec<String>,
pub data_residency: Option<String>,
}
impl Default for GeographicPreferences {
fn default() -> Self {
Self {
preferred_regions: vec![],
data_residency: None,
}
}
}