quantrs2_device/provider_capability_discovery/
capabilities.rs

1//! Provider capabilities for the discovery system.
2//!
3//! This module contains comprehensive provider capability structures
4//! covering hardware, software, performance, cost, security, and support.
5
6use 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/// Comprehensive provider capabilities
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct ProviderCapabilities {
21    /// Basic capabilities
22    pub basic: BasicCapabilities,
23    /// Hardware capabilities
24    pub hardware: HardwareCapabilities,
25    /// Software capabilities
26    pub software: SoftwareCapabilities,
27    /// Performance characteristics
28    pub performance: PerformanceCapabilities,
29    /// Cost characteristics
30    pub cost: CostCapabilities,
31    /// Security capabilities
32    pub security: SecurityCapabilities,
33    /// Support capabilities
34    pub support: SupportCapabilities,
35    /// Advanced features
36    pub advanced_features: AdvancedFeatures,
37}
38
39/// Basic provider capabilities
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct BasicCapabilities {
42    /// Number of qubits
43    pub qubit_count: usize,
44    /// Supported gate set
45    pub gate_set: HashSet<String>,
46    /// Connectivity graph
47    pub connectivity: ConnectivityGraph,
48    /// Supported measurements
49    pub measurement_types: Vec<MeasurementType>,
50    /// Classical register size
51    pub classical_register_size: usize,
52    /// Maximum circuit depth
53    pub max_circuit_depth: Option<usize>,
54    /// Maximum shots per execution
55    pub max_shots: Option<u64>,
56}
57
58/// Hardware capabilities
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct HardwareCapabilities {
61    /// Quantum volume
62    pub quantum_volume: Option<u32>,
63    /// Error rates
64    pub error_rates: ErrorRates,
65    /// Coherence times
66    pub coherence_times: CoherenceTimes,
67    /// Gate times
68    pub gate_times: HashMap<String, Duration>,
69    /// Crosstalk characteristics
70    pub crosstalk: CrosstalkCharacteristics,
71    /// Calibration information
72    pub calibration: CalibrationInfo,
73    /// Temperature information
74    pub temperature: Option<f64>,
75    /// Noise characteristics
76    pub noise_characteristics: NoiseCharacteristics,
77}
78
79/// Error rate information
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct ErrorRates {
82    /// Single-qubit gate error rates
83    pub single_qubit_gates: HashMap<String, f64>,
84    /// Two-qubit gate error rates
85    pub two_qubit_gates: HashMap<String, f64>,
86    /// Readout error rates
87    pub readout_errors: HashMap<usize, f64>,
88    /// Average error rate
89    pub average_error_rate: f64,
90    /// Error rate variance
91    pub error_rate_variance: f64,
92}
93
94/// Coherence time information
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct CoherenceTimes {
97    /// T1 relaxation times per qubit
98    pub t1_times: HashMap<usize, Duration>,
99    /// T2 dephasing times per qubit
100    pub t2_times: HashMap<usize, Duration>,
101    /// Average T1 time
102    pub average_t1: Duration,
103    /// Average T2 time
104    pub average_t2: Duration,
105}
106
107/// Crosstalk characteristics
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct CrosstalkCharacteristics {
110    /// Crosstalk matrix
111    pub crosstalk_matrix: Array2<f64>,
112    /// Spectral crosstalk
113    pub spectral_crosstalk: HashMap<String, f64>,
114    /// Temporal crosstalk
115    pub temporal_crosstalk: HashMap<String, f64>,
116    /// Mitigation strategies available
117    pub mitigation_strategies: Vec<String>,
118}
119
120/// Calibration information
121#[derive(Debug, Clone, Serialize, Deserialize)]
122pub struct CalibrationInfo {
123    /// Last calibration time
124    pub last_calibration: SystemTime,
125    /// Calibration frequency
126    pub calibration_frequency: Duration,
127    /// Calibration quality score
128    pub quality_score: f64,
129    /// Drift rate
130    pub drift_rate: f64,
131    /// Calibration method
132    pub calibration_method: String,
133}
134
135/// Noise characteristics
136#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct NoiseCharacteristics {
138    /// Noise model type
139    pub noise_model_type: String,
140    /// Noise parameters
141    pub noise_parameters: HashMap<String, f64>,
142    /// Noise correlations
143    pub noise_correlations: Array2<f64>,
144    /// Environmental noise factors
145    pub environmental_factors: HashMap<String, f64>,
146}
147
148/// Software capabilities
149#[derive(Debug, Clone, Serialize, Deserialize)]
150pub struct SoftwareCapabilities {
151    /// Supported frameworks
152    pub supported_frameworks: Vec<QuantumFramework>,
153    /// Programming languages
154    pub programming_languages: Vec<String>,
155    /// Compilation features
156    pub compilation_features: CompilationFeatures,
157    /// Optimization features
158    pub optimization_features: OptimizationFeatures,
159    /// Simulation capabilities
160    pub simulation_capabilities: SimulationCapabilities,
161    /// Integration capabilities
162    pub integration_capabilities: IntegrationCapabilities,
163}
164
165/// Compilation features
166#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct CompilationFeatures {
168    /// Circuit optimization
169    pub circuit_optimization: bool,
170    /// Gate synthesis
171    pub gate_synthesis: bool,
172    /// Routing algorithms
173    pub routing_algorithms: Vec<String>,
174    /// Transpilation passes
175    pub transpilation_passes: Vec<String>,
176    /// Custom compilation
177    pub custom_compilation: bool,
178}
179
180/// Optimization features
181#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct OptimizationFeatures {
183    /// Parameter optimization
184    pub parameter_optimization: bool,
185    /// Circuit depth optimization
186    pub depth_optimization: bool,
187    /// Gate count optimization
188    pub gate_count_optimization: bool,
189    /// Noise-aware optimization
190    pub noise_aware_optimization: bool,
191    /// Variational algorithms
192    pub variational_algorithms: Vec<String>,
193}
194
195/// Simulation capabilities
196#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct SimulationCapabilities {
198    /// Classical simulation
199    pub classical_simulation: bool,
200    /// Noise simulation
201    pub noise_simulation: bool,
202    /// Error simulation
203    pub error_simulation: bool,
204    /// Maximum simulated qubits
205    pub max_simulated_qubits: Option<usize>,
206    /// Simulation backends
207    pub simulation_backends: Vec<String>,
208}
209
210/// Integration capabilities
211#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct IntegrationCapabilities {
213    /// REST API
214    pub rest_api: bool,
215    /// GraphQL API
216    pub graphql_api: bool,
217    /// WebSocket support
218    pub websocket_support: bool,
219    /// SDK availability
220    pub sdk_languages: Vec<String>,
221    /// Third-party integrations
222    pub third_party_integrations: Vec<String>,
223}
224
225/// Performance capabilities
226#[derive(Debug, Clone, Serialize, Deserialize)]
227pub struct PerformanceCapabilities {
228    /// Throughput metrics
229    pub throughput: ThroughputMetrics,
230    /// Latency metrics
231    pub latency: LatencyMetrics,
232    /// Availability metrics
233    pub availability: AvailabilityMetrics,
234    /// Scalability characteristics
235    pub scalability: ScalabilityCharacteristics,
236    /// Resource utilization
237    pub resource_utilization: ResourceUtilizationMetrics,
238}
239
240/// Throughput metrics
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct ThroughputMetrics {
243    /// Circuits per hour
244    pub circuits_per_hour: f64,
245    /// Shots per second
246    pub shots_per_second: f64,
247    /// Jobs per day
248    pub jobs_per_day: f64,
249    /// Peak throughput
250    pub peak_throughput: f64,
251    /// Sustained throughput
252    pub sustained_throughput: f64,
253}
254
255/// Latency metrics
256#[derive(Debug, Clone, Serialize, Deserialize)]
257pub struct LatencyMetrics {
258    /// Job submission latency
259    pub submission_latency: Duration,
260    /// Queue wait time
261    pub queue_wait_time: Duration,
262    /// Execution time
263    pub execution_time: Duration,
264    /// Result retrieval time
265    pub result_retrieval_time: Duration,
266    /// Total turnaround time
267    pub total_turnaround_time: Duration,
268}
269
270/// Availability metrics
271#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct AvailabilityMetrics {
273    /// Uptime percentage
274    pub uptime_percentage: f64,
275    /// Mean time between failures
276    pub mtbf: Duration,
277    /// Mean time to recovery
278    pub mttr: Duration,
279    /// Maintenance windows
280    pub maintenance_windows: Vec<MaintenanceWindow>,
281    /// Service level agreement
282    pub sla: Option<ServiceLevelAgreement>,
283}
284
285/// Maintenance window information
286#[derive(Debug, Clone, Serialize, Deserialize)]
287pub struct MaintenanceWindow {
288    /// Start time
289    pub start_time: SystemTime,
290    /// Duration
291    pub duration: Duration,
292    /// Frequency
293    pub frequency: MaintenanceFrequency,
294    /// Impact level
295    pub impact_level: ImpactLevel,
296    /// Description
297    pub description: String,
298}
299
300/// Service level agreement
301#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct ServiceLevelAgreement {
303    /// Guaranteed uptime
304    pub guaranteed_uptime: f64,
305    /// Maximum response time
306    pub max_response_time: Duration,
307    /// Support response time
308    pub support_response_time: Duration,
309    /// Resolution time
310    pub resolution_time: Duration,
311    /// Penalty clauses
312    pub penalty_clauses: Vec<String>,
313}
314
315/// Scalability characteristics
316#[derive(Debug, Clone, Serialize, Deserialize)]
317pub struct ScalabilityCharacteristics {
318    /// Horizontal scalability
319    pub horizontal_scalability: bool,
320    /// Vertical scalability
321    pub vertical_scalability: bool,
322    /// Auto-scaling support
323    pub auto_scaling: bool,
324    /// Maximum concurrent jobs
325    pub max_concurrent_jobs: Option<u32>,
326    /// Load balancing
327    pub load_balancing: bool,
328}
329
330/// Resource utilization metrics
331#[derive(Debug, Clone, Serialize, Deserialize)]
332pub struct ResourceUtilizationMetrics {
333    /// CPU utilization
334    pub cpu_utilization: f64,
335    /// Memory utilization
336    pub memory_utilization: f64,
337    /// Network utilization
338    pub network_utilization: f64,
339    /// Storage utilization
340    pub storage_utilization: f64,
341    /// Quantum resource utilization
342    pub quantum_utilization: f64,
343}
344
345/// Cost capabilities
346#[derive(Debug, Clone, Serialize, Deserialize)]
347pub struct CostCapabilities {
348    /// Cost model
349    pub cost_model: CostModel,
350    /// Cost optimization features
351    pub cost_optimization: CostOptimizationFeatures,
352    /// Budget management
353    pub budget_management: BudgetManagementFeatures,
354    /// Cost transparency
355    pub cost_transparency: CostTransparencyFeatures,
356}
357
358/// Cost model information
359#[derive(Debug, Clone, Serialize, Deserialize)]
360pub struct CostModel {
361    /// Pricing structure
362    pub pricing_structure: PricingStructure,
363    /// Cost factors
364    pub cost_factors: Vec<CostFactor>,
365    /// Volume discounts
366    pub volume_discounts: Vec<VolumeDiscount>,
367    /// Regional pricing
368    pub regional_pricing: HashMap<String, f64>,
369    /// Currency support
370    pub supported_currencies: Vec<String>,
371}
372
373/// Pricing structure
374#[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/// Cost factors
385#[derive(Debug, Clone, Serialize, Deserialize)]
386pub struct CostFactor {
387    /// Factor name
388    pub name: String,
389    /// Factor type
390    pub factor_type: CostFactorType,
391    /// Unit cost
392    pub unit_cost: f64,
393    /// Minimum charge
394    pub minimum_charge: Option<f64>,
395    /// Maximum charge
396    pub maximum_charge: Option<f64>,
397}
398
399/// Cost factor types
400#[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/// Volume discount information
413#[derive(Debug, Clone, Serialize, Deserialize)]
414pub struct VolumeDiscount {
415    /// Minimum volume
416    pub min_volume: u64,
417    /// Discount percentage
418    pub discount_percentage: f64,
419    /// Discount type
420    pub discount_type: DiscountType,
421}
422
423/// Discount types
424#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
425pub enum DiscountType {
426    Percentage,
427    Fixed,
428    Tiered,
429    Progressive,
430}
431
432/// Cost optimization features
433#[derive(Debug, Clone, Serialize, Deserialize)]
434pub struct CostOptimizationFeatures {
435    /// Cost estimation
436    pub cost_estimation: bool,
437    /// Cost tracking
438    pub cost_tracking: bool,
439    /// Budget alerts
440    pub budget_alerts: bool,
441    /// Cost optimization recommendations
442    pub optimization_recommendations: bool,
443    /// Spot pricing
444    pub spot_pricing: bool,
445}
446
447/// Budget management features
448#[derive(Debug, Clone, Serialize, Deserialize)]
449pub struct BudgetManagementFeatures {
450    /// Budget setting
451    pub budget_setting: bool,
452    /// Budget monitoring
453    pub budget_monitoring: bool,
454    /// Spending limits
455    pub spending_limits: bool,
456    /// Cost allocation
457    pub cost_allocation: bool,
458    /// Invoice management
459    pub invoice_management: bool,
460}
461
462/// Cost transparency features
463#[derive(Debug, Clone, Serialize, Deserialize)]
464pub struct CostTransparencyFeatures {
465    /// Real-time cost display
466    pub realtime_cost_display: bool,
467    /// Detailed cost breakdown
468    pub detailed_breakdown: bool,
469    /// Historical cost analysis
470    pub historical_analysis: bool,
471    /// Cost comparison tools
472    pub comparison_tools: bool,
473    /// Cost reporting
474    pub cost_reporting: bool,
475}
476
477/// Security capabilities
478#[derive(Debug, Clone, Serialize, Deserialize)]
479pub struct SecurityCapabilities {
480    /// Authentication methods
481    pub authentication: Vec<AuthenticationMethod>,
482    /// Authorization models
483    pub authorization: Vec<AuthorizationModel>,
484    /// Encryption capabilities
485    pub encryption: EncryptionCapabilities,
486    /// Compliance certifications
487    pub compliance: Vec<ComplianceStandard>,
488    /// Security monitoring
489    pub security_monitoring: SecurityMonitoringCapabilities,
490}
491
492/// Encryption capabilities
493#[derive(Debug, Clone, Serialize, Deserialize)]
494pub struct EncryptionCapabilities {
495    /// Data at rest encryption
496    pub data_at_rest: bool,
497    /// Data in transit encryption
498    pub data_in_transit: bool,
499    /// End-to-end encryption
500    pub end_to_end: bool,
501    /// Encryption algorithms
502    pub algorithms: Vec<String>,
503    /// Key management
504    pub key_management: KeyManagementCapabilities,
505}
506
507/// Key management capabilities
508#[derive(Debug, Clone, Serialize, Deserialize)]
509pub struct KeyManagementCapabilities {
510    /// Customer-managed keys
511    pub customer_managed_keys: bool,
512    /// Hardware security modules
513    pub hsm_support: bool,
514    /// Key rotation
515    pub key_rotation: bool,
516    /// Key escrow
517    pub key_escrow: bool,
518    /// Multi-party computation
519    pub mpc_support: bool,
520}
521
522/// Security monitoring capabilities
523#[derive(Debug, Clone, Serialize, Deserialize)]
524pub struct SecurityMonitoringCapabilities {
525    /// Audit logging
526    pub audit_logging: bool,
527    /// Intrusion detection
528    pub intrusion_detection: bool,
529    /// Anomaly detection
530    pub anomaly_detection: bool,
531    /// Security alerts
532    pub security_alerts: bool,
533    /// Threat intelligence
534    pub threat_intelligence: bool,
535}
536
537/// Support capabilities
538#[derive(Debug, Clone, Serialize, Deserialize)]
539pub struct SupportCapabilities {
540    /// Support channels
541    pub support_channels: Vec<SupportChannel>,
542    /// Support hours
543    pub support_hours: SupportHours,
544    /// Response times
545    pub response_times: ResponseTimeGuarantees,
546    /// Documentation quality
547    pub documentation_quality: DocumentationQuality,
548    /// Training and education
549    pub training_education: TrainingEducationCapabilities,
550}
551
552/// Support hours
553#[derive(Debug, Clone, Serialize, Deserialize)]
554pub struct SupportHours {
555    /// Business hours support
556    pub business_hours: bool,
557    /// 24/7 support
558    pub twenty_four_seven: bool,
559    /// Weekend support
560    pub weekend_support: bool,
561    /// Holiday support
562    pub holiday_support: bool,
563    /// Timezone coverage
564    pub timezone_coverage: Vec<String>,
565}
566
567/// Response time guarantees
568#[derive(Debug, Clone, Serialize, Deserialize)]
569pub struct ResponseTimeGuarantees {
570    /// Critical issues
571    pub critical_response_time: Duration,
572    /// High priority issues
573    pub high_priority_response_time: Duration,
574    /// Medium priority issues
575    pub medium_priority_response_time: Duration,
576    /// Low priority issues
577    pub low_priority_response_time: Duration,
578    /// First response time
579    pub first_response_time: Duration,
580}
581
582/// Documentation quality assessment
583#[derive(Debug, Clone, Serialize, Deserialize)]
584pub struct DocumentationQuality {
585    /// Completeness score
586    pub completeness_score: f64,
587    /// Accuracy score
588    pub accuracy_score: f64,
589    /// Clarity score
590    pub clarity_score: f64,
591    /// Up-to-date score
592    pub up_to_date_score: f64,
593    /// Example quality
594    pub example_quality: f64,
595}
596
597/// Training and education capabilities
598#[derive(Debug, Clone, Serialize, Deserialize)]
599pub struct TrainingEducationCapabilities {
600    /// Online courses
601    pub online_courses: bool,
602    /// Workshops
603    pub workshops: bool,
604    /// Certification programs
605    pub certification_programs: bool,
606    /// Consulting services
607    pub consulting_services: bool,
608    /// Community forums
609    pub community_forums: bool,
610}
611
612/// Advanced features
613#[derive(Debug, Clone, Serialize, Deserialize)]
614pub struct AdvancedFeatures {
615    /// Machine learning integration
616    pub ml_integration: MLIntegrationFeatures,
617    /// Hybrid computing
618    pub hybrid_computing: HybridComputingFeatures,
619    /// Quantum networking
620    pub quantum_networking: QuantumNetworkingFeatures,
621    /// Research capabilities
622    pub research_capabilities: ResearchCapabilities,
623    /// Experimental features
624    pub experimental_features: Vec<String>,
625}
626
627/// ML integration features
628#[derive(Debug, Clone, Serialize, Deserialize)]
629pub struct MLIntegrationFeatures {
630    /// Quantum machine learning
631    pub quantum_ml: bool,
632    /// Classical ML integration
633    pub classical_ml_integration: bool,
634    /// AutoML support
635    pub automl_support: bool,
636    /// Supported ML frameworks
637    pub ml_frameworks: Vec<String>,
638    /// GPU acceleration
639    pub gpu_acceleration: bool,
640}
641
642/// Hybrid computing features
643#[derive(Debug, Clone, Serialize, Deserialize)]
644pub struct HybridComputingFeatures {
645    /// Classical-quantum integration
646    pub classical_quantum_integration: bool,
647    /// Real-time feedback
648    pub realtime_feedback: bool,
649    /// Iterative algorithms
650    pub iterative_algorithms: bool,
651    /// HPC integration
652    pub hpc_integration: bool,
653    /// Edge computing
654    pub edge_computing: bool,
655}
656
657/// Quantum networking features
658#[derive(Debug, Clone, Serialize, Deserialize)]
659pub struct QuantumNetworkingFeatures {
660    /// Quantum internet support
661    pub quantum_internet: bool,
662    /// Quantum key distribution
663    pub qkd_support: bool,
664    /// Distributed quantum computing
665    pub distributed_computing: bool,
666    /// Quantum teleportation
667    pub quantum_teleportation: bool,
668    /// Network protocols
669    pub network_protocols: Vec<String>,
670}
671
672/// Research capabilities
673#[derive(Debug, Clone, Serialize, Deserialize)]
674pub struct ResearchCapabilities {
675    /// Research partnerships
676    pub research_partnerships: bool,
677    /// Academic pricing
678    pub academic_pricing: bool,
679    /// Research tools
680    pub research_tools: bool,
681    /// Data sharing capabilities
682    pub data_sharing: bool,
683    /// Publication support
684    pub publication_support: bool,
685}