1use std::collections::{HashMap, HashSet};
7use std::time::{Duration, SystemTime};
8
9use scirs2_core::ndarray::Array2;
10use serde::{Deserialize, Serialize};
11
12use super::config::ComplianceStandard;
13use super::types::{
14 AuthenticationMethod, AuthorizationModel, ConnectivityGraph, ImpactLevel, MaintenanceFrequency,
15 MeasurementType, QuantumFramework, SupportChannel,
16};
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct ProviderCapabilities {
21 pub basic: BasicCapabilities,
23 pub hardware: HardwareCapabilities,
25 pub software: SoftwareCapabilities,
27 pub performance: PerformanceCapabilities,
29 pub cost: CostCapabilities,
31 pub security: SecurityCapabilities,
33 pub support: SupportCapabilities,
35 pub advanced_features: AdvancedFeatures,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct BasicCapabilities {
42 pub qubit_count: usize,
44 pub gate_set: HashSet<String>,
46 pub connectivity: ConnectivityGraph,
48 pub measurement_types: Vec<MeasurementType>,
50 pub classical_register_size: usize,
52 pub max_circuit_depth: Option<usize>,
54 pub max_shots: Option<u64>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct HardwareCapabilities {
61 pub quantum_volume: Option<u32>,
63 pub error_rates: ErrorRates,
65 pub coherence_times: CoherenceTimes,
67 pub gate_times: HashMap<String, Duration>,
69 pub crosstalk: CrosstalkCharacteristics,
71 pub calibration: CalibrationInfo,
73 pub temperature: Option<f64>,
75 pub noise_characteristics: NoiseCharacteristics,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct ErrorRates {
82 pub single_qubit_gates: HashMap<String, f64>,
84 pub two_qubit_gates: HashMap<String, f64>,
86 pub readout_errors: HashMap<usize, f64>,
88 pub average_error_rate: f64,
90 pub error_rate_variance: f64,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct CoherenceTimes {
97 pub t1_times: HashMap<usize, Duration>,
99 pub t2_times: HashMap<usize, Duration>,
101 pub average_t1: Duration,
103 pub average_t2: Duration,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct CrosstalkCharacteristics {
110 pub crosstalk_matrix: Array2<f64>,
112 pub spectral_crosstalk: HashMap<String, f64>,
114 pub temporal_crosstalk: HashMap<String, f64>,
116 pub mitigation_strategies: Vec<String>,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize)]
122pub struct CalibrationInfo {
123 pub last_calibration: SystemTime,
125 pub calibration_frequency: Duration,
127 pub quality_score: f64,
129 pub drift_rate: f64,
131 pub calibration_method: String,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct NoiseCharacteristics {
138 pub noise_model_type: String,
140 pub noise_parameters: HashMap<String, f64>,
142 pub noise_correlations: Array2<f64>,
144 pub environmental_factors: HashMap<String, f64>,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize)]
150pub struct SoftwareCapabilities {
151 pub supported_frameworks: Vec<QuantumFramework>,
153 pub programming_languages: Vec<String>,
155 pub compilation_features: CompilationFeatures,
157 pub optimization_features: OptimizationFeatures,
159 pub simulation_capabilities: SimulationCapabilities,
161 pub integration_capabilities: IntegrationCapabilities,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct CompilationFeatures {
168 pub circuit_optimization: bool,
170 pub gate_synthesis: bool,
172 pub routing_algorithms: Vec<String>,
174 pub transpilation_passes: Vec<String>,
176 pub custom_compilation: bool,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct OptimizationFeatures {
183 pub parameter_optimization: bool,
185 pub depth_optimization: bool,
187 pub gate_count_optimization: bool,
189 pub noise_aware_optimization: bool,
191 pub variational_algorithms: Vec<String>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct SimulationCapabilities {
198 pub classical_simulation: bool,
200 pub noise_simulation: bool,
202 pub error_simulation: bool,
204 pub max_simulated_qubits: Option<usize>,
206 pub simulation_backends: Vec<String>,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct IntegrationCapabilities {
213 pub rest_api: bool,
215 pub graphql_api: bool,
217 pub websocket_support: bool,
219 pub sdk_languages: Vec<String>,
221 pub third_party_integrations: Vec<String>,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize)]
227pub struct PerformanceCapabilities {
228 pub throughput: ThroughputMetrics,
230 pub latency: LatencyMetrics,
232 pub availability: AvailabilityMetrics,
234 pub scalability: ScalabilityCharacteristics,
236 pub resource_utilization: ResourceUtilizationMetrics,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct ThroughputMetrics {
243 pub circuits_per_hour: f64,
245 pub shots_per_second: f64,
247 pub jobs_per_day: f64,
249 pub peak_throughput: f64,
251 pub sustained_throughput: f64,
253}
254
255#[derive(Debug, Clone, Serialize, Deserialize)]
257pub struct LatencyMetrics {
258 pub submission_latency: Duration,
260 pub queue_wait_time: Duration,
262 pub execution_time: Duration,
264 pub result_retrieval_time: Duration,
266 pub total_turnaround_time: Duration,
268}
269
270#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct AvailabilityMetrics {
273 pub uptime_percentage: f64,
275 pub mtbf: Duration,
277 pub mttr: Duration,
279 pub maintenance_windows: Vec<MaintenanceWindow>,
281 pub sla: Option<ServiceLevelAgreement>,
283}
284
285#[derive(Debug, Clone, Serialize, Deserialize)]
287pub struct MaintenanceWindow {
288 pub start_time: SystemTime,
290 pub duration: Duration,
292 pub frequency: MaintenanceFrequency,
294 pub impact_level: ImpactLevel,
296 pub description: String,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct ServiceLevelAgreement {
303 pub guaranteed_uptime: f64,
305 pub max_response_time: Duration,
307 pub support_response_time: Duration,
309 pub resolution_time: Duration,
311 pub penalty_clauses: Vec<String>,
313}
314
315#[derive(Debug, Clone, Serialize, Deserialize)]
317pub struct ScalabilityCharacteristics {
318 pub horizontal_scalability: bool,
320 pub vertical_scalability: bool,
322 pub auto_scaling: bool,
324 pub max_concurrent_jobs: Option<u32>,
326 pub load_balancing: bool,
328}
329
330#[derive(Debug, Clone, Serialize, Deserialize)]
332pub struct ResourceUtilizationMetrics {
333 pub cpu_utilization: f64,
335 pub memory_utilization: f64,
337 pub network_utilization: f64,
339 pub storage_utilization: f64,
341 pub quantum_utilization: f64,
343}
344
345#[derive(Debug, Clone, Serialize, Deserialize)]
347pub struct CostCapabilities {
348 pub cost_model: CostModel,
350 pub cost_optimization: CostOptimizationFeatures,
352 pub budget_management: BudgetManagementFeatures,
354 pub cost_transparency: CostTransparencyFeatures,
356}
357
358#[derive(Debug, Clone, Serialize, Deserialize)]
360pub struct CostModel {
361 pub pricing_structure: PricingStructure,
363 pub cost_factors: Vec<CostFactor>,
365 pub volume_discounts: Vec<VolumeDiscount>,
367 pub regional_pricing: HashMap<String, f64>,
369 pub supported_currencies: Vec<String>,
371}
372
373#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
375pub enum PricingStructure {
376 Fixed,
377 Variable,
378 Tiered,
379 Usage,
380 Hybrid,
381 Negotiated,
382}
383
384#[derive(Debug, Clone, Serialize, Deserialize)]
386pub struct CostFactor {
387 pub name: String,
389 pub factor_type: CostFactorType,
391 pub unit_cost: f64,
393 pub minimum_charge: Option<f64>,
395 pub maximum_charge: Option<f64>,
397}
398
399#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
401pub enum CostFactorType {
402 PerShot,
403 PerCircuit,
404 PerMinute,
405 PerHour,
406 PerQubit,
407 PerGate,
408 PerJob,
409 Fixed,
410}
411
412#[derive(Debug, Clone, Serialize, Deserialize)]
414pub struct VolumeDiscount {
415 pub min_volume: u64,
417 pub discount_percentage: f64,
419 pub discount_type: DiscountType,
421}
422
423#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
425pub enum DiscountType {
426 Percentage,
427 Fixed,
428 Tiered,
429 Progressive,
430}
431
432#[derive(Debug, Clone, Serialize, Deserialize)]
434pub struct CostOptimizationFeatures {
435 pub cost_estimation: bool,
437 pub cost_tracking: bool,
439 pub budget_alerts: bool,
441 pub optimization_recommendations: bool,
443 pub spot_pricing: bool,
445}
446
447#[derive(Debug, Clone, Serialize, Deserialize)]
449pub struct BudgetManagementFeatures {
450 pub budget_setting: bool,
452 pub budget_monitoring: bool,
454 pub spending_limits: bool,
456 pub cost_allocation: bool,
458 pub invoice_management: bool,
460}
461
462#[derive(Debug, Clone, Serialize, Deserialize)]
464pub struct CostTransparencyFeatures {
465 pub realtime_cost_display: bool,
467 pub detailed_breakdown: bool,
469 pub historical_analysis: bool,
471 pub comparison_tools: bool,
473 pub cost_reporting: bool,
475}
476
477#[derive(Debug, Clone, Serialize, Deserialize)]
479pub struct SecurityCapabilities {
480 pub authentication: Vec<AuthenticationMethod>,
482 pub authorization: Vec<AuthorizationModel>,
484 pub encryption: EncryptionCapabilities,
486 pub compliance: Vec<ComplianceStandard>,
488 pub security_monitoring: SecurityMonitoringCapabilities,
490}
491
492#[derive(Debug, Clone, Serialize, Deserialize)]
494pub struct EncryptionCapabilities {
495 pub data_at_rest: bool,
497 pub data_in_transit: bool,
499 pub end_to_end: bool,
501 pub algorithms: Vec<String>,
503 pub key_management: KeyManagementCapabilities,
505}
506
507#[derive(Debug, Clone, Serialize, Deserialize)]
509pub struct KeyManagementCapabilities {
510 pub customer_managed_keys: bool,
512 pub hsm_support: bool,
514 pub key_rotation: bool,
516 pub key_escrow: bool,
518 pub mpc_support: bool,
520}
521
522#[derive(Debug, Clone, Serialize, Deserialize)]
524pub struct SecurityMonitoringCapabilities {
525 pub audit_logging: bool,
527 pub intrusion_detection: bool,
529 pub anomaly_detection: bool,
531 pub security_alerts: bool,
533 pub threat_intelligence: bool,
535}
536
537#[derive(Debug, Clone, Serialize, Deserialize)]
539pub struct SupportCapabilities {
540 pub support_channels: Vec<SupportChannel>,
542 pub support_hours: SupportHours,
544 pub response_times: ResponseTimeGuarantees,
546 pub documentation_quality: DocumentationQuality,
548 pub training_education: TrainingEducationCapabilities,
550}
551
552#[derive(Debug, Clone, Serialize, Deserialize)]
554pub struct SupportHours {
555 pub business_hours: bool,
557 pub twenty_four_seven: bool,
559 pub weekend_support: bool,
561 pub holiday_support: bool,
563 pub timezone_coverage: Vec<String>,
565}
566
567#[derive(Debug, Clone, Serialize, Deserialize)]
569pub struct ResponseTimeGuarantees {
570 pub critical_response_time: Duration,
572 pub high_priority_response_time: Duration,
574 pub medium_priority_response_time: Duration,
576 pub low_priority_response_time: Duration,
578 pub first_response_time: Duration,
580}
581
582#[derive(Debug, Clone, Serialize, Deserialize)]
584pub struct DocumentationQuality {
585 pub completeness_score: f64,
587 pub accuracy_score: f64,
589 pub clarity_score: f64,
591 pub up_to_date_score: f64,
593 pub example_quality: f64,
595}
596
597#[derive(Debug, Clone, Serialize, Deserialize)]
599pub struct TrainingEducationCapabilities {
600 pub online_courses: bool,
602 pub workshops: bool,
604 pub certification_programs: bool,
606 pub consulting_services: bool,
608 pub community_forums: bool,
610}
611
612#[derive(Debug, Clone, Serialize, Deserialize)]
614pub struct AdvancedFeatures {
615 pub ml_integration: MLIntegrationFeatures,
617 pub hybrid_computing: HybridComputingFeatures,
619 pub quantum_networking: QuantumNetworkingFeatures,
621 pub research_capabilities: ResearchCapabilities,
623 pub experimental_features: Vec<String>,
625}
626
627#[derive(Debug, Clone, Serialize, Deserialize)]
629pub struct MLIntegrationFeatures {
630 pub quantum_ml: bool,
632 pub classical_ml_integration: bool,
634 pub automl_support: bool,
636 pub ml_frameworks: Vec<String>,
638 pub gpu_acceleration: bool,
640}
641
642#[derive(Debug, Clone, Serialize, Deserialize)]
644pub struct HybridComputingFeatures {
645 pub classical_quantum_integration: bool,
647 pub realtime_feedback: bool,
649 pub iterative_algorithms: bool,
651 pub hpc_integration: bool,
653 pub edge_computing: bool,
655}
656
657#[derive(Debug, Clone, Serialize, Deserialize)]
659pub struct QuantumNetworkingFeatures {
660 pub quantum_internet: bool,
662 pub qkd_support: bool,
664 pub distributed_computing: bool,
666 pub quantum_teleportation: bool,
668 pub network_protocols: Vec<String>,
670}
671
672#[derive(Debug, Clone, Serialize, Deserialize)]
674pub struct ResearchCapabilities {
675 pub research_partnerships: bool,
677 pub academic_pricing: bool,
679 pub research_tools: bool,
681 pub data_sharing: bool,
683 pub publication_support: bool,
685}