quantrs2_device/
lib.rs

1// Architectural decisions - these are intentional design patterns
2#![allow(clippy::unnecessary_wraps)] // Result return types for API consistency
3#![allow(clippy::unused_self)] // Trait implementations require &self
4#![allow(clippy::unused_async)]
5// Async placeholders for future implementation
6// Performance-related (not safety issues, can be optimized later)
7#![allow(clippy::significant_drop_tightening)] // Lock scope optimization TODO
8// Style-related (low priority)
9#![allow(clippy::match_same_arms)] // Sometimes intentional for clarity
10#![allow(clippy::option_if_let_else)] // Style preference
11#![allow(clippy::return_self_not_must_use)] // Builder pattern
12#![allow(clippy::needless_range_loop)] // Sometimes clearer with index
13// Additional suppressions for remaining warnings
14#![allow(clippy::branches_sharing_code)] // Sometimes intentional
15#![allow(clippy::type_complexity)] // Quantum types are complex
16#![allow(clippy::missing_const_for_fn)] // Not always beneficial
17#![allow(clippy::format_push_string)] // Performance optimization TODO
18#![allow(clippy::cast_possible_truncation)] // Platform-specific, validated
19#![allow(clippy::future_not_send)] // Async architecture decision
20#![allow(clippy::needless_pass_by_ref_mut)] // API consistency
21#![allow(clippy::cast_precision_loss)] // Acceptable for quantum simulation
22#![allow(clippy::uninlined_format_args)] // Style preference
23#![allow(clippy::assigning_clones)] // Sometimes clearer
24#![allow(clippy::zero_sized_map_values)] // Intentional for set-like maps
25#![allow(clippy::used_underscore_binding)] // Sometimes needed for unused captures
26#![allow(clippy::collection_is_never_read)] // Builder pattern / lazy evaluation
27#![allow(clippy::wildcard_in_or_patterns)] // Sometimes intentional
28#![allow(clippy::ptr_arg)] // API consistency with slices
29#![allow(clippy::implicit_hasher)] // Generic hasher not always needed
30#![allow(clippy::ref_option)] // Sometimes needed for lifetime reasons
31#![allow(clippy::expect_fun_call)] // Clearer error messages
32#![allow(clippy::if_not_else)] // Sometimes clearer
33#![allow(clippy::iter_on_single_items)] // Sometimes intentional
34#![allow(clippy::trivially_copy_pass_by_ref)] // API consistency
35#![allow(clippy::empty_line_after_doc_comments)] // Formatting preference
36#![allow(clippy::manual_let_else)] // Style preference
37#![allow(clippy::await_holding_lock)] // Async architecture
38// Full clippy category suppressions
39#![allow(clippy::pedantic)]
40#![allow(clippy::nursery)]
41#![allow(clippy::cargo)]
42// Additional specific suppressions
43#![allow(clippy::large_enum_variant)]
44#![allow(clippy::borrowed_box)]
45#![allow(clippy::manual_map)]
46#![allow(clippy::non_send_fields_in_send_ty)]
47#![allow(clippy::if_same_then_else)]
48#![allow(clippy::manual_clamp)]
49#![allow(clippy::double_must_use)]
50#![allow(clippy::only_used_in_recursion)]
51#![allow(clippy::same_item_push)]
52#![allow(clippy::format_in_format_args)]
53#![allow(clippy::implied_bounds_in_impls)]
54#![allow(clippy::explicit_counter_loop)]
55#![allow(clippy::duplicated_attributes)]
56#![allow(clippy::new_ret_no_self)]
57#![allow(clippy::must_use_unit)]
58#![allow(clippy::redundant_pattern_matching)]
59#![allow(clippy::redundant_guards)]
60#![allow(clippy::wrong_self_convention)]
61#![allow(clippy::iter_next_slice)]
62#![allow(clippy::create_dir)]
63#![allow(clippy::enum_variant_names)]
64// Additional specific suppressions (correct lint names)
65#![allow(clippy::should_implement_trait)] // Methods like default(), from_str(), next()
66#![allow(clippy::upper_case_acronyms)] // VQE, QAOA, QFT, CNOT, SGD
67#![allow(clippy::unnecessary_map_or)] // map_or simplification suggestions
68#![allow(clippy::derivable_impls)] // Impl can be derived
69#![allow(clippy::or_fun_call)] // unwrap_or_else with default value
70#![allow(clippy::cloned_ref_to_slice_refs)] // clone can be replaced with from_ref
71#![allow(clippy::collapsible_match)]
72#![allow(clippy::len_without_is_empty)]
73#![allow(clippy::arc_with_non_send_sync)]
74#![allow(clippy::std_instead_of_core)] // Allow std usage
75#![allow(clippy::match_like_matches_macro)] // Sometimes match is clearer
76#![allow(clippy::suspicious_open_options)] // File open options
77#![allow(clippy::new_without_default)] // new() without Default impl
78#![allow(clippy::unwrap_or_default)] // Allow unwrap_or_else(Default::default)
79
80//! Quantum device connectors for the QuantRS2 framework.
81//!
82//! This crate provides connectivity to quantum hardware providers like IBM Quantum,
83//! Azure Quantum, and AWS Braket. It enables users to run quantum circuits on real
84//! quantum hardware or cloud-based simulators.
85//!
86//! ## Recent Updates (v0.1.0)
87//!
88//! - ✅ Re-enabled enhanced SciRS2 modules with full API compliance
89//! - ✅ `scirs2_hardware_benchmarks_enhanced`: ML-driven performance prediction and analysis
90//! - ✅ `scirs2_noise_characterization_enhanced`: Advanced noise modeling with SciRS2 stats
91//! - ✅ Enhanced transpilation using SciRS2 v0.1.2 Stable Release's graph algorithms
92//! - ✅ Stable APIs for IBM Quantum, Azure Quantum, and AWS Braket
93//! - ✅ All 406 tests passing with zero compilation warnings
94//! - ✅ Full SciRS2 Policy compliance for scientific computing operations
95
96use quantrs2_circuit::prelude::Circuit;
97use std::collections::HashMap;
98use thiserror::Error;
99
100pub mod adaptive_compilation;
101pub mod advanced_benchmarking_suite;
102pub mod advanced_scheduling;
103pub mod algorithm_marketplace;
104/// Public exports for commonly used types
105// Forward declaration - implemented below
106// pub mod prelude;
107pub mod aws;
108pub mod aws_device;
109pub mod azure;
110pub mod azure_device;
111pub mod backend_traits;
112pub mod benchmarking;
113pub mod calibration;
114pub mod characterization;
115pub mod circuit_integration;
116pub mod circuit_migration;
117pub mod cloud;
118pub mod compiler_passes;
119pub mod continuous_variable;
120pub mod cost_optimization;
121pub mod cross_compiler_scirs2_ir;
122pub mod cross_platform_benchmarking;
123pub mod crosstalk;
124pub mod distributed;
125pub mod dynamical_decoupling;
126pub mod hardware_benchmarks_scirs2;
127pub mod hardware_parallelization;
128pub mod hybrid_quantum_classical;
129pub mod hybrid_scirs2_algorithms;
130pub mod ibm;
131pub mod ibm_calibration;
132pub mod ibm_device;
133pub mod ibm_dynamic;
134pub mod ibm_runtime;
135pub mod ibm_runtime_v2;
136pub mod integrated_device_manager;
137pub mod job_scheduling;
138#[cfg(feature = "scirs2")]
139pub mod mapping_scirs2;
140pub mod mid_circuit_measurements;
141pub mod ml_optimization;
142pub mod neutral_atom;
143pub mod noise_model;
144pub mod noise_modeling_scirs2;
145pub mod noise_scirs2_characterization;
146pub mod optimization;
147pub mod optimization_old;
148pub mod parametric;
149pub mod performance_analytics_dashboard;
150pub mod performance_dashboard;
151pub mod photonic;
152pub mod process_tomography;
153pub mod provider_capability_discovery;
154pub mod pulse;
155pub mod pulse_scirs2_signal;
156pub mod qasm3;
157pub mod qasm_scirs2_compiler;
158pub mod qec;
159pub mod quantum_ml;
160pub mod quantum_ml_integration;
161pub mod quantum_network;
162pub mod quantum_system_security;
163pub mod routing;
164pub mod routing_advanced;
165pub mod scirs2_calibration_enhanced;
166// Beta.3: Enhanced modules successfully re-enabled with full SciRS2 v0.1.2 Stable Release compliance
167pub mod scirs2_hardware_benchmarks_enhanced;
168pub mod scirs2_noise_characterization_enhanced;
169pub mod security;
170pub mod telemetry;
171pub mod topological;
172pub mod topology;
173pub mod topology_analysis;
174pub mod translation;
175pub mod transpiler;
176pub mod transpiler_scirs2_graph;
177pub mod unified_benchmarking;
178pub mod unified_error_handling;
179pub mod vqa_support;
180pub mod zero_noise_extrapolation;
181
182// Test utilities
183#[cfg(test)]
184pub mod test_utils;
185
186// AWS authentication module
187#[cfg(feature = "aws")]
188pub mod aws_auth;
189
190// AWS circuit conversion module
191#[cfg(feature = "aws")]
192pub mod aws_conversion;
193
194/// Result type for device operations
195pub type DeviceResult<T> = Result<T, DeviceError>;
196
197/// Errors that can occur during device operations
198#[derive(Error, Debug, Clone)]
199pub enum DeviceError {
200    #[error("Authentication error: {0}")]
201    Authentication(String),
202
203    #[error("Connection error: {0}")]
204    Connection(String),
205
206    #[error("API error: {0}")]
207    APIError(String),
208
209    #[error("Job submission error: {0}")]
210    JobSubmission(String),
211
212    #[error("Job execution error: {0}")]
213    JobExecution(String),
214
215    #[error("Execution failed: {0}")]
216    ExecutionFailed(String),
217
218    #[error("Timeout error: {0}")]
219    Timeout(String),
220
221    #[error("Deserialization error: {0}")]
222    Deserialization(String),
223
224    #[error("Device not supported: {0}")]
225    UnsupportedDevice(String),
226
227    #[error("Circuit conversion error: {0}")]
228    CircuitConversion(String),
229
230    #[error("Insufficient qubits: required {required}, available {available}")]
231    InsufficientQubits { required: usize, available: usize },
232
233    #[error("Routing error: {0}")]
234    RoutingError(String),
235
236    #[error("Unsupported operation: {0}")]
237    UnsupportedOperation(String),
238
239    #[error("Invalid input: {0}")]
240    InvalidInput(String),
241
242    #[error("Optimization error: {0}")]
243    OptimizationError(String),
244
245    #[error("Not implemented: {0}")]
246    NotImplemented(String),
247
248    #[error("Transpiler error: {0}")]
249    TranspilerError(String),
250
251    #[error("Invalid mapping: {0}")]
252    InvalidMapping(String),
253
254    #[error("Graph analysis error: {0}")]
255    GraphAnalysisError(String),
256
257    #[error("Device not found: {0}")]
258    DeviceNotFound(String),
259
260    #[error("Device not initialized: {0}")]
261    DeviceNotInitialized(String),
262
263    #[error("Job execution failed: {0}")]
264    JobExecutionFailed(String),
265
266    #[error("Invalid response: {0}")]
267    InvalidResponse(String),
268
269    #[error("Unknown job status: {0}")]
270    UnknownJobStatus(String),
271
272    #[error("Resource exhaustion: {0}")]
273    ResourceExhaustion(String),
274
275    #[error("Lock error: {0}")]
276    LockError(String),
277
278    #[error("Session error: {0}")]
279    SessionError(String),
280
281    #[error("Calibration error: {0}")]
282    CalibrationError(String),
283
284    #[error("QASM error: {0}")]
285    QasmError(String),
286
287    #[error("Invalid topology: {0}")]
288    InvalidTopology(String),
289}
290
291/// Convert QuantRS2Error to DeviceError
292impl From<quantrs2_core::error::QuantRS2Error> for DeviceError {
293    fn from(err: quantrs2_core::error::QuantRS2Error) -> Self {
294        Self::APIError(err.to_string())
295    }
296}
297
298/// Convert String to DeviceError
299impl From<String> for DeviceError {
300    fn from(err: String) -> Self {
301        Self::APIError(err)
302    }
303}
304
305/// Convert OptimizeError to DeviceError
306impl From<crate::ml_optimization::OptimizeError> for DeviceError {
307    fn from(err: crate::ml_optimization::OptimizeError) -> Self {
308        Self::OptimizationError(err.to_string())
309    }
310}
311
312/// Convert StatsError to DeviceError
313impl From<scirs2_stats::StatsError> for DeviceError {
314    fn from(err: scirs2_stats::StatsError) -> Self {
315        Self::InvalidInput(format!("Statistical analysis error: {}", err))
316    }
317}
318
319/// General representation of quantum hardware
320#[cfg(feature = "ibm")]
321#[async_trait::async_trait]
322pub trait QuantumDevice {
323    /// Check if the device is available for use
324    async fn is_available(&self) -> DeviceResult<bool>;
325
326    /// Get the number of qubits on the device
327    async fn qubit_count(&self) -> DeviceResult<usize>;
328
329    /// Get device properties such as error rates, connectivity, etc.
330    async fn properties(&self) -> DeviceResult<HashMap<String, String>>;
331
332    /// Check if the device is a simulator
333    async fn is_simulator(&self) -> DeviceResult<bool>;
334}
335
336#[cfg(not(feature = "ibm"))]
337pub trait QuantumDevice {
338    /// Check if the device is available for use
339    fn is_available(&self) -> DeviceResult<bool>;
340
341    /// Get the number of qubits on the device
342    fn qubit_count(&self) -> DeviceResult<usize>;
343
344    /// Get device properties such as error rates, connectivity, etc.
345    fn properties(&self) -> DeviceResult<HashMap<String, String>>;
346
347    /// Check if the device is a simulator
348    fn is_simulator(&self) -> DeviceResult<bool>;
349}
350
351/// Trait for devices that can execute quantum circuits
352#[cfg(feature = "ibm")]
353#[async_trait::async_trait]
354pub trait CircuitExecutor: QuantumDevice {
355    /// Execute a quantum circuit on the device
356    async fn execute_circuit<const N: usize>(
357        &self,
358        circuit: &Circuit<N>,
359        shots: usize,
360    ) -> DeviceResult<CircuitResult>;
361
362    /// Execute multiple circuits in parallel
363    async fn execute_circuits<const N: usize>(
364        &self,
365        circuits: Vec<&Circuit<N>>,
366        shots: usize,
367    ) -> DeviceResult<Vec<CircuitResult>>;
368
369    /// Check if a circuit can be executed on the device
370    async fn can_execute_circuit<const N: usize>(&self, circuit: &Circuit<N>)
371        -> DeviceResult<bool>;
372
373    /// Get estimated queue time for a circuit execution
374    async fn estimated_queue_time<const N: usize>(
375        &self,
376        circuit: &Circuit<N>,
377    ) -> DeviceResult<std::time::Duration>;
378}
379
380#[cfg(not(feature = "ibm"))]
381pub trait CircuitExecutor: QuantumDevice {
382    /// Execute a quantum circuit on the device
383    fn execute_circuit<const N: usize>(
384        &self,
385        circuit: &Circuit<N>,
386        shots: usize,
387    ) -> DeviceResult<CircuitResult>;
388
389    /// Execute multiple circuits in parallel
390    fn execute_circuits<const N: usize>(
391        &self,
392        circuits: Vec<&Circuit<N>>,
393        shots: usize,
394    ) -> DeviceResult<Vec<CircuitResult>>;
395
396    /// Check if a circuit can be executed on the device
397    fn can_execute_circuit<const N: usize>(&self, circuit: &Circuit<N>) -> DeviceResult<bool>;
398
399    /// Get estimated queue time for a circuit execution
400    fn estimated_queue_time<const N: usize>(
401        &self,
402        circuit: &Circuit<N>,
403    ) -> DeviceResult<std::time::Duration>;
404}
405
406/// Result of a circuit execution on hardware
407#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
408pub struct CircuitResult {
409    /// Counts of each basis state
410    pub counts: HashMap<String, usize>,
411
412    /// Total number of shots executed
413    pub shots: usize,
414
415    /// Additional metadata about the execution
416    pub metadata: HashMap<String, String>,
417}
418
419/// Check if device integration is available and properly set up
420pub const fn is_available() -> bool {
421    #[cfg(any(feature = "ibm", feature = "azure", feature = "aws"))]
422    {
423        true
424    }
425
426    #[cfg(not(any(feature = "ibm", feature = "azure", feature = "aws")))]
427    {
428        false
429    }
430}
431
432/// Create an IBM Quantum client
433///
434/// Requires the "ibm" feature to be enabled
435#[cfg(feature = "ibm")]
436pub fn create_ibm_client(token: &str) -> DeviceResult<ibm::IBMQuantumClient> {
437    ibm::IBMQuantumClient::new(token)
438}
439
440/// Create an IBM Quantum client
441///
442/// This function is available as a stub when the "ibm" feature is not enabled
443#[cfg(not(feature = "ibm"))]
444pub fn create_ibm_client(_token: &str) -> DeviceResult<()> {
445    Err(DeviceError::UnsupportedDevice(
446        "IBM Quantum support not enabled. Recompile with the 'ibm' feature.".to_string(),
447    ))
448}
449
450/// Create an IBM Quantum device instance
451#[cfg(feature = "ibm")]
452pub async fn create_ibm_device(
453    token: &str,
454    backend_name: &str,
455    config: Option<ibm_device::IBMDeviceConfig>,
456) -> DeviceResult<impl CircuitExecutor> {
457    let client = create_ibm_client(token)?;
458    ibm_device::IBMQuantumDevice::new(client, backend_name, config).await
459}
460
461/// Create an IBM Quantum device instance
462///
463/// This function is available as a stub when the "ibm" feature is not enabled
464#[cfg(not(feature = "ibm"))]
465pub async fn create_ibm_device(
466    _token: &str,
467    _backend_name: &str,
468    _config: Option<()>,
469) -> DeviceResult<()> {
470    Err(DeviceError::UnsupportedDevice(
471        "IBM Quantum support not enabled. Recompile with the 'ibm' feature.".to_string(),
472    ))
473}
474
475/// Create an Azure Quantum client
476///
477/// Requires the "azure" feature to be enabled
478#[cfg(feature = "azure")]
479pub fn create_azure_client(
480    token: &str,
481    subscription_id: &str,
482    resource_group: &str,
483    workspace: &str,
484    region: Option<&str>,
485) -> DeviceResult<azure::AzureQuantumClient> {
486    azure::AzureQuantumClient::new(token, subscription_id, resource_group, workspace, region)
487}
488
489/// Create an Azure Quantum client
490///
491/// This function is available as a stub when the "azure" feature is not enabled
492#[cfg(not(feature = "azure"))]
493pub fn create_azure_client(
494    _token: &str,
495    _subscription_id: &str,
496    _resource_group: &str,
497    _workspace: &str,
498    _region: Option<&str>,
499) -> DeviceResult<()> {
500    Err(DeviceError::UnsupportedDevice(
501        "Azure Quantum support not enabled. Recompile with the 'azure' feature.".to_string(),
502    ))
503}
504
505/// Create an Azure Quantum device instance
506#[cfg(feature = "azure")]
507pub async fn create_azure_device(
508    client: azure::AzureQuantumClient,
509    target_id: &str,
510    provider_id: Option<&str>,
511    config: Option<azure_device::AzureDeviceConfig>,
512) -> DeviceResult<impl QuantumDevice + CircuitExecutor> {
513    azure_device::AzureQuantumDevice::new(client, target_id, provider_id, config).await
514}
515
516/// Create an Azure Quantum device instance
517///
518/// This function is available as a stub when the "azure" feature is not enabled
519#[cfg(not(feature = "azure"))]
520pub async fn create_azure_device(
521    _client: (),
522    _target_id: &str,
523    _provider_id: Option<&str>,
524    _config: Option<()>,
525) -> DeviceResult<()> {
526    Err(DeviceError::UnsupportedDevice(
527        "Azure Quantum support not enabled. Recompile with the 'azure' feature.".to_string(),
528    ))
529}
530
531/// Create an AWS Braket client
532///
533/// Requires the "aws" feature to be enabled
534#[cfg(feature = "aws")]
535pub fn create_aws_client(
536    access_key: &str,
537    secret_key: &str,
538    region: Option<&str>,
539    s3_bucket: &str,
540    s3_key_prefix: Option<&str>,
541) -> DeviceResult<aws::AWSBraketClient> {
542    aws::AWSBraketClient::new(access_key, secret_key, region, s3_bucket, s3_key_prefix)
543}
544
545/// Create an AWS Braket client
546///
547/// This function is available as a stub when the "aws" feature is not enabled
548#[cfg(not(feature = "aws"))]
549pub fn create_aws_client(
550    _access_key: &str,
551    _secret_key: &str,
552    _region: Option<&str>,
553    _s3_bucket: &str,
554    _s3_key_prefix: Option<&str>,
555) -> DeviceResult<()> {
556    Err(DeviceError::UnsupportedDevice(
557        "AWS Braket support not enabled. Recompile with the 'aws' feature.".to_string(),
558    ))
559}
560
561/// Create an AWS Braket device instance
562#[cfg(feature = "aws")]
563pub async fn create_aws_device(
564    client: aws::AWSBraketClient,
565    device_arn: &str,
566    config: Option<aws_device::AWSDeviceConfig>,
567) -> DeviceResult<impl QuantumDevice + CircuitExecutor> {
568    aws_device::AWSBraketDevice::new(client, device_arn, config).await
569}
570
571/// Create an AWS Braket device instance
572///
573/// This function is available as a stub when the "aws" feature is not enabled
574#[cfg(not(feature = "aws"))]
575pub async fn create_aws_device(
576    _client: (),
577    _device_arn: &str,
578    _config: Option<()>,
579) -> DeviceResult<()> {
580    Err(DeviceError::UnsupportedDevice(
581        "AWS Braket support not enabled. Recompile with the 'aws' feature.".to_string(),
582    ))
583}
584
585/// Re-exports of commonly used types and traits
586pub mod prelude {
587    pub use crate::advanced_benchmarking_suite::{
588        AdvancedBenchmarkConfig, AdvancedBenchmarkResult, AdvancedHardwareBenchmarkSuite,
589        AdvancedStatisticalResult, AdvancedStatsConfig, AnomalyDetectionConfig,
590        AnomalyDetectionResult, BenchmarkOptimizationConfig, MLAnalysisResult, MLBenchmarkConfig,
591        PredictionResult, PredictiveModelingConfig, RealtimeBenchmarkConfig,
592    };
593    pub use crate::backend_traits::{
594        google_gates, honeywell_gates, ibm_gates, ionq_gates, query_backend_capabilities,
595        rigetti_gates, BackendCapabilities, BackendFeatures, BackendPerformance, HardwareGate,
596    };
597    pub use crate::benchmarking::{
598        BenchmarkConfig, BenchmarkResult, BenchmarkSuite, GraphAnalysis, HardwareBenchmarkSuite,
599        NoiseAnalysis, PerformanceMetrics as BenchmarkingMetrics, StatisticalAnalysis,
600    };
601    pub use crate::calibration::{
602        create_ideal_calibration, CalibrationBuilder, CalibrationManager, CrosstalkMatrix,
603        DeviceCalibration, DeviceTopology, QubitCalibration, ReadoutCalibration,
604        SingleQubitGateCalibration, TwoQubitGateCalibration,
605    };
606    pub use crate::characterization::{
607        CrosstalkCharacterization as CharacterizationCrosstalk, DriftTracker, ProcessTomography,
608        RandomizedBenchmarking, StateTomography,
609    };
610    pub use crate::circuit_integration::{
611        create_high_performance_config, create_universal_interface, AnalyticsConfig, CacheConfig,
612        CircuitVariant, CostInfo, ExecutionAnalytics, ExecutionMetadata, ExecutionResult,
613        IntegrationConfig, OptimizationSettings, OptimizedCircuit,
614        PerformanceMetrics as CircuitPerformanceMetrics, PlatformAdapter, PlatformConfig,
615        PlatformMetrics, SelectionCriteria, UniversalCircuitInterface,
616    };
617    pub use crate::cloud::{
618        allocation::{AllocationAlgorithm, ResourceOptimizationObjective},
619        cost_management::CostOptimizationStrategy,
620        monitoring::CloudMonitoringConfig,
621        orchestration::{LoadBalancingStrategy, PerformanceOptimizationStrategy},
622        providers::{CloudProvider, MultiProviderConfig, ProviderSelectionStrategy},
623    };
624    pub use crate::compiler_passes::{
625        CompilationResult, CompilerConfig, HardwareAllocation, HardwareCompiler,
626        HardwareConstraints, OptimizationObjective, OptimizationStats, PassInfo,
627        PerformancePrediction,
628    };
629    pub use crate::continuous_variable::{
630        cluster_states::{
631            ClusterStateConfig, ClusterStateGenerator, ClusterStateType, ClusterStateValidation,
632            MBQCMeasurement, MBQCResult,
633        },
634        create_cluster_state_cv_device, create_gaussian_cv_device,
635        cv_gates::{CVGateLibrary, CVGateParams, CVGateSequence, CVGateType},
636        error_correction::{
637            CVErrorCorrectionCode, CVErrorCorrectionConfig, CVErrorCorrector, CVLogicalState,
638            CorrectionResult,
639        },
640        gaussian_states::GaussianState,
641        heterodyne::{
642            HeterodyneDetector, HeterodyneDetectorConfig, HeterodyneResult, HeterodyneStatistics,
643        },
644        homodyne::{HomodyneDetector, HomodyneDetectorConfig, HomodyneResult, HomodyneStatistics},
645        measurements::{
646            CVMeasurementConfig, CVMeasurementEngine, CVMeasurementScheme, MeasurementStatistics,
647        },
648        CVDeviceConfig, CVDeviceDiagnostics, CVEntanglementMeasures, CVMeasurementOutcome,
649        CVMeasurementResult, CVMeasurementType, CVModeState, CVQuantumDevice, CVSystemType,
650        Complex,
651    };
652    pub use crate::scirs2_calibration_enhanced::{
653        AnalysisOptions, CNOTData, CalibrationConfig, CalibrationFeedback, CalibrationInput,
654        CalibrationModel, CalibrationObjective, CalibrationPrediction, CalibrationProtocols,
655        CalibrationRecommendation, CalibrationReport, CalibrationState, CalibrationSummary,
656        CalibrationVisualizations, ChevronData, CoherenceTimes, CoherentError, CorrelatedError,
657        CrosstalkCharacterization as EnhancedCrosstalkCharacterization, CrosstalkParameters,
658        CrosstalkProtocols, DetailedResults, DiscriminationData, DiscriminationParameters,
659        DragData, DriftAnalysis, DriftDirection, DriftMeasurement, EnhancedCalibrationConfig,
660        EnhancedCalibrationSystem, ErrorAnalysis, ErrorCharacterization, ErrorData, ErrorModel,
661        ErrorModelTrait, GSTData, GateSet, HardwareSpec, IQData, IQParameters,
662        IdentificationMethod, IncoherentError, IncoherentErrorType, MLSystemParameters,
663        PerformanceMetrics, PerformanceThresholds, Priority, ProcessTomographyData, QualityMetrics,
664        QuantumOperation, QubitParameters, RBData, RabiData, RamseyData,
665        ReadoutCalibration as EnhancedReadoutCalibration, ReadoutParameters, ReadoutProtocols,
666        RecommendationCategory, SingleQubitCalibration, SingleQubitProtocols, SystemAnalysis,
667        SystemCalibrationResult, SystemModel, TwoQubitCalibration, TwoQubitParameters,
668        TwoQubitProtocols, ZZData,
669    };
670    // pub use crate::cost_optimization::{
671    //     CostOptimizationEngine, CostOptimizationConfig, CostOptimizationStrategy as CostStrategy, CostEstimate,
672    //     CostBreakdown, CostEstimationMetadata, BudgetConfig, BudgetStatus, BudgetRolloverPolicy,
673    //     CostModel, CostModelType, ProviderComparisonResult, ProviderMetrics, ComparisonMetric,
674    //     PredictiveModelingConfig as CostPredictiveConfig, PredictiveModelType, PredictionResult as CostPredictionResult,
675    //     ResourceRequirements as CostResourceRequirements, OptimizationResult as CostOptimizationResult,
676    //     OptimizationStatus, BudgetConstraint, TimeConstraint, QualityRequirement,
677    //     OptimizationRecommendation, RecommendationType, CostTrends, TrendDirection, CostAnomaly,
678    //     MonitoringMetric, CostAlertConfig, CostAlertRule, AlertCondition, AlertSeverity,
679    //     NotificationChannel, DashboardConfig, DashboardWidget, MLCostModel, PredictiveModel,
680    // };
681    pub use crate::crosstalk::{
682        CrosstalkAnalyzer, CrosstalkCharacterization, CrosstalkConfig, CrosstalkMechanism,
683        MitigationStrategy, SpatialCrosstalkAnalysis, SpectralCrosstalkAnalysis,
684        TemporalCrosstalkAnalysis,
685    };
686    pub use crate::distributed::{
687        AuthenticationMethod as DistributedAuthenticationMethod, CircuitDecompositionResult,
688        CommunicationProtocol, DistributedCommand, DistributedComputingConfig,
689        DistributedCostAnalysis, DistributedEvent, DistributedExecutionResult,
690        DistributedExecutionStatus, DistributedMonitoringConfig, DistributedOptimizationConfig,
691        DistributedOrchestratorConfig, DistributedPerformanceAnalytics,
692        DistributedQuantumOrchestrator, DistributedResourceConfig, DistributedResourceUtilization,
693        DistributedWorkflow, DistributedWorkflowType,
694        EncryptionAlgorithm as DistributedEncryptionAlgorithm, FaultToleranceConfig,
695        FaultToleranceMetrics, LoadBalancingAlgorithm, LoadBalancingConfig, NetworkConfig,
696        NetworkPerformanceMetrics, NetworkTopology, NodeCapabilities, NodeInfo, NodeStatus,
697        OptimizationObjective as DistributedOptimizationObjective, ReplicationStrategy,
698        SecurityAuditTrail, SecurityConfig as DistributedSecurityConfig,
699        WorkloadDistributionStrategy,
700    };
701    pub use crate::hardware_parallelization::{
702        ExecutionConstraints, ExecutionQualityMetrics, HardwareAwarenessConfig,
703        HardwareParallelizationEngine, LoadBalancingConfig as ParallelLoadBalancingConfig,
704        LoadBalancingResult, OptimizationSuggestion, ParallelCircuitTask, ParallelExecutionResult,
705        ParallelGateTask, ParallelResourceRequirements, ParallelSchedulingConfig,
706        ParallelizationConfig, ParallelizationStrategy,
707        PerformanceMetrics as ParallelPerformanceMetrics, PerformanceOptimizationConfig,
708        QualityRequirements, ResourceAllocationConfig, ResourceConstraints, ResourceUsage,
709        TaskPriority, TimingConstraints,
710    };
711    pub use crate::hybrid_quantum_classical::{
712        AdaptationAlgorithm, AdaptiveControlConfig, BackendSelectionConfig, BackoffStrategy,
713        CircuitOptimizationConfig, ClassicalComputationConfig, ClassicalComputationResult,
714        ConvergenceConfig, ConvergenceCriterion, ConvergenceReason, ConvergenceStatus,
715        ErrorHandlingConfig, ErrorRecoveryStrategy, FeedbackAlgorithm, FeedbackControlConfig,
716        HybridLoopConfig, HybridLoopResult, HybridLoopState, HybridLoopStrategy,
717        HybridOptimizationConfig, HybridOptimizer, HybridPerformanceConfig,
718        HybridQuantumClassicalExecutor, IterationResult, NoiseModelingConfig, OptimizationLevel,
719        OptimizationPass, OptimizationSummary, PerformanceMetrics as HybridPerformanceMetrics,
720        QualityMetrics as HybridQualityMetrics, QuantumExecutionConfig, QuantumExecutionResult,
721        RetryConfig, SelectionCriterion, StateEstimationMethod,
722    };
723    pub use crate::ibm::IBMCircuitConfig;
724    pub use crate::integrated_device_manager::{
725        DeviceInfo,
726        ExecutionStatus, // ExecutionStrategy, DeviceSelectionCriteria, ExecutionMode, DeviceCapabilityInfo,
727        // OptimizationMode, IntegratedAnalyticsConfig, HardwareCompatibilityInfo, DeviceHealthInfo,
728        IntegratedDeviceConfig,
729        IntegratedExecutionResult,
730        IntegratedQuantumDeviceManager,
731    };
732    pub use crate::job_scheduling::{
733        create_batch_job_config, create_high_priority_config, create_realtime_config,
734        AllocationStrategy as JobAllocationStrategy, BackendPerformance as JobBackendPerformance,
735        BackendStatus, ExecutionMetrics, JobConfig, JobExecution, JobId, JobPriority, JobStatus,
736        QuantumJob, QuantumJobScheduler, QueueAnalytics, ResourceRequirements, SchedulerEvent,
737        SchedulingParams, SchedulingStrategy,
738    };
739    // Re-enabled after fixing scirs2-graph API changes
740    pub use crate::algorithm_marketplace::{
741        APIConfig, ActiveDeployment, AlgorithmDeploymentManager, AlgorithmDiscoveryEngine,
742        AlgorithmInfo, AlgorithmOptimizationEngine, AlgorithmRegistration, AlgorithmRegistry,
743        AlgorithmValidationService, AlgorithmVersioningSystem, DeploymentRequest, DeploymentStatus,
744        DiscoveryCriteria, MarketplaceAPI, MarketplaceConfig, MonetizationSystem,
745        OptimizationConfig as MarketplaceOptimizationConfig, PaymentMethod, Permission,
746        PricingStrategy, QuantumAlgorithmMarketplace, SubscriptionModel, UserSession, UserType,
747        ValidationConfig as MarketplaceValidationConfig, VersioningConfig,
748    };
749    #[cfg(feature = "scirs2")]
750    pub use crate::mapping_scirs2::{
751        InitialMappingAlgorithm, OptimizationObjective as MappingObjective, SciRS2MappingConfig,
752        SciRS2MappingResult, SciRS2QubitMapper, SciRS2RoutingAlgorithm,
753    };
754    pub use crate::mid_circuit_measurements::{
755        ExecutionStats, HardwareOptimizations, MeasurementEvent, MidCircuitCapabilities,
756        MidCircuitConfig, MidCircuitDeviceExecutor, MidCircuitExecutionResult, MidCircuitExecutor,
757        PerformanceMetrics as MidCircuitPerformanceMetrics, ValidationConfig, ValidationResult,
758    };
759    pub use crate::noise_model::{
760        CalibrationNoiseModel, GateNoiseParams, NoiseModelBuilder, QubitNoiseParams,
761        ReadoutNoiseParams,
762    };
763    pub use crate::noise_modeling_scirs2::{SciRS2NoiseConfig, SciRS2NoiseModeler};
764    pub use crate::optimization::{
765        CalibrationOptimizer, FidelityEstimator, OptimizationConfig, OptimizationResult,
766        PulseOptimizer,
767    };
768    pub use crate::parametric::{
769        BatchExecutionRequest, BatchExecutionResult, Parameter, ParameterExpression,
770        ParameterOptimizer, ParametricCircuit, ParametricCircuitBuilder, ParametricExecutor,
771        ParametricGate, ParametricTemplates,
772    };
773    pub use crate::photonic::{
774        create_photonic_device,
775        gate_based::{
776            OpticalElement, PhotonicCircuitCompiler, PhotonicCircuitImplementation,
777            PhotonicGateImpl, PhotonicGates, PhotonicHardwareConstraints, PhotonicQubitEncoding,
778            PhotonicQubitState, PhotonicResourceRequirements,
779        },
780        gates::{
781            BeamsplitterGate, CrossKerrGate, DisplacementGate, KerrGate, PhaseRotationGate,
782            SqueezingGate, TwoModeSqueezingGate,
783        },
784        validate_photonic_config, PhotonicCircuitResult, PhotonicClient, PhotonicConfig,
785        PhotonicDeviceConfig, PhotonicExecutionMetadata, PhotonicMeasurementData, PhotonicMode,
786        PhotonicQuantumDevice, PhotonicSystemType,
787    };
788    pub use crate::provider_capability_discovery::{
789        create_high_performance_discovery_config, create_provider_discovery_system,
790        CachedCapability, CapabilityRequirements, ComparisonResults, ConnectivityRequirement,
791        DiscoveryCommand, DiscoveryConfig, DiscoveryEvent, DiscoveryStrategy, FilteringConfig,
792        ProviderCapabilities, ProviderCapabilityDiscoverySystem, ProviderFeature, ProviderInfo,
793        ProviderRanking, ProviderType, ReportType as DiscoveryReportType, TopologyType,
794        VerificationConfig, VerificationStatus,
795    };
796    pub use crate::pulse::{
797        ChannelType, MeasLevel, MeasurementData, PulseBackend, PulseBuilder, PulseCalibration,
798        PulseInstruction, PulseLibrary, PulseResult, PulseSchedule, PulseShape, PulseTemplates,
799    };
800    pub use crate::qec::{
801        adaptive::AdaptiveQECConfig, codes::QECCodeType, detection::SyndromeDetectionConfig,
802        mitigation::ErrorMitigationConfig, QECConfig, QECMLConfig, QECMonitoringConfig,
803        QECOptimizationConfig, QECStrategy,
804    };
805    pub use crate::quantum_ml::{
806        create_qaoa_accelerator, create_vqc_accelerator,
807        gradients::{
808            create_finite_difference_calculator, create_parameter_shift_calculator, GradientConfig,
809            GradientUtils, Observable as QMLObservable, ObservableTerm, QuantumGradientCalculator,
810        },
811        optimization::{
812            create_gradient_free_optimizer, create_gradient_optimizer, GradientBasedOptimizer,
813            GradientFreeOptimizer, ObjectiveFunction as QMLObjectiveFunction,
814            OptimizationResult as QMLOptResult, OptimizationStep, OptimizerConfig,
815            QuantumOptimizer, VQEObjectiveFunction,
816        },
817        quantum_neural_networks::{
818            create_pqc_classifier, create_qcnn_classifier, ClassificationResult,
819            EntanglingStrategy, InputEncoding, OutputDecoding, PQCNetwork, QConvLayer,
820            QNNArchitecture, QNNType, QPoolingLayer, QPoolingType, QuantumNeuralNetwork, QCNN, VQC,
821        },
822        training::{
823            create_supervised_trainer, create_training_data, BatchObjectiveFunction,
824            CrossEntropyLoss, LossFunction as QMLLossFunction, MSELoss, QuantumTrainer,
825            TrainingData as QMLTrainingData, TrainingMetrics, TrainingResult as QMLTrainingResult,
826        },
827        variational_algorithms::{
828            create_molecular_vqe, AdamOptimizer, EntanglingGateType, Hamiltonian,
829            HardwareEfficientAnsatz, MolecularHamiltonian, ParameterizedQuantumCircuit,
830            PauliOperator, PauliTerm, QAOAConfig, QAOAResult, QAOASolution, QuantumGate,
831            QuantumState, VQEConfig, VQEResult, VariationalAnsatz, VariationalOptimizer, QAOA, VQE,
832        },
833        CircuitStructure, GradientMethod as QMLGradientMethod, InferenceData, InferenceResult,
834        ModelExportFormat, ModelRegistry, NoiseResilienceLevel,
835        OptimizationResult as QMLOptimizationResult, OptimizerType, QMLAccelerator, QMLConfig,
836        QMLDiagnostics, QMLModel, QMLModelType, TrainingData, TrainingEpoch, TrainingResult,
837        TrainingStatistics,
838    };
839    pub use crate::quantum_ml_integration::{
840        create_high_performance_qml_config, create_qml_integration_hub,
841        AnomalyType as QMLAnomalyType, FrameworkBridge, HybridMLOptimizer, LossFunction,
842        MLFramework, MLPerformanceAnalytics, QMLArchitecture, QMLDataBatch, QMLDataPipeline,
843        QMLDataset, QMLInferenceResult, QMLIntegrationConfig, QMLMonitoringConfig,
844        QMLOptimizationConfig, QMLResourceConfig, QMLResourceRequirements, QMLTrainingConfig,
845        QMLTrainingOrchestrator, QuantumEncodingType, QuantumMLIntegrationHub,
846        QuantumNeuralNetworkExecutor, TrainingPriority,
847    };
848    pub use crate::quantum_system_security::{
849        AuthenticationMethod as SecurityAuthenticationMethod, AuthorizationModel,
850        ComplianceStandard, EncryptionProtocol, PostQuantumAlgorithm, QuantumSecurityConfig,
851        QuantumSecurityExecutionResult, QuantumSecurityExecutionStatus,
852        QuantumSystemSecurityFramework, RegulatoryFramework,
853        SecurityAnalyticsEngine as SecurityAnalyticsEngineType, SecurityClassification,
854        SecurityMLModel, SecurityObjective, SecurityOperation, SecurityOperationType,
855        SecurityStandard, ThreatDetectionAlgorithm,
856    };
857    pub use crate::routing_advanced::{
858        AdvancedQubitRouter, AdvancedRoutingResult, AdvancedRoutingStrategy, RoutingMetrics,
859        SwapOperation,
860    };
861    pub use crate::scirs2_hardware_benchmarks_enhanced::{
862        AnalysisMethod, AnomalyType, BenchmarkConfig as EnhancedBenchmarkConfig2,
863        BenchmarkRecommendation, BenchmarkReport, BenchmarkSuite as EnhancedBenchmarkSuite,
864        BenchmarkSuiteResult, BenchmarkVisualizations, ChartType, ComparativeAnalysis,
865        ComparativeSummary, ComparisonChart, ComparisonDataSet, ComprehensiveBenchmarkResult,
866        ConfidenceInterval, CorrelationMatrix, DataSeries, DegradationEvent, DegradationThreshold,
867        DegradationTimeline, DegradationType, DeviceComparison, DeviceInfo as BenchmarkDeviceInfo,
868        EffortLevel, EnhancedBenchmarkConfig, EnhancedHardwareBenchmark, ExecutiveSummary,
869        ExportFormat as BenchmarkExportFormat, HeatmapVisualization, HistoricalAnomaly,
870        HistoricalComparison, ImpactLevel, IndustryPosition, IndustryTier,
871        MaintenanceRecommendation, MaintenanceType, MetricReport, MetricTrend, PerformanceMetric,
872        PerformancePredictions, PerformanceTrend, PlotType as BenchmarkPlotType,
873        PredictedPerformance, PredictionSummary, Priority as BenchmarkPriority, RadarChart,
874        RadarDataSet, RecommendationCategory as BenchmarkRecommendationCategory,
875        ReportingOptions as BenchmarkReportingOptions, Severity as BenchmarkSeverity,
876        SignificanceTest, StatisticalAnalysis as BenchmarkStatisticalAnalysis, StatisticalSummary,
877        SuiteReport, SuiteStatistics, TrendPlot,
878    };
879    pub use crate::scirs2_noise_characterization_enhanced::{
880        AlertType, AnalysisParameters, CorrelationAnalysis as NoiseCorrelationAnalysis,
881        EnhancedNoiseCharacterizer, EnhancedNoiseConfig, ExportFormat as NoiseExportFormat,
882        HeatmapData, Landscape3D, MLNoiseInsights, ModelAnalysis, NoiseAlert,
883        NoiseCharacterizationConfig, NoiseCharacterizationResult, NoiseClassification, NoiseModel,
884        NoisePredictions, NoiseReport, NoiseSummary, NoiseTrend, NoiseVisualizations, PlotData,
885        PlotMetadata, PlotType, PredictedNoisePoint, Priority as NoisePriority,
886        Recommendation as NoiseRecommendation, RecommendationType,
887        ReportingOptions as NoiseReportingOptions, Severity, SpectralAnalysis, StatisticalMethod,
888        SurfaceType, TemporalAnalysis, Visualization3DParams,
889    };
890    pub use crate::telemetry::{
891        create_high_performance_telemetry_config, create_telemetry_system, Alert, AlertConfig,
892        AlertManager, AlertSeverity, AlertState, AnalyticsConfig as TelemetryAnalyticsConfig,
893        AnomalyDetector, AnomalyResult, AnomalyType as TelemetryAnomalyType, ExportConfig,
894        HealthStatus, Metric, MetricCollector, MetricConfig, MetricType, MonitoringConfig,
895        QuantumTelemetrySystem, RealTimeMonitor, ReportType, RetentionConfig, SystemHealth,
896        SystemStatus, TelemetryAnalytics, TelemetryCommand, TelemetryConfig, TelemetryEvent,
897        TelemetryReport, TelemetryStorage, TrendDirection,
898    };
899    pub use crate::topological::{
900        anyons::{AnyonFactory, AnyonTracker, ChargeAlgebra},
901        braiding::{BraidGroupElement, BraidingMatrixCalculator, BraidingOperationManager},
902        device::{
903            create_fibonacci_device, create_ising_device, EnhancedTopologicalDevice,
904            TopologicalDeviceConfig, TopologicalDeviceDiagnostics,
905        },
906        error_correction::{
907            ErrorCorrectionConfig, RealTimeErrorMonitor, TopologicalErrorCorrector,
908        },
909        fusion::{FSymbolCalculator, FusionOperationExecutor, FusionTree},
910        topological_codes::{
911            ColorCode, ErrorCorrection, SurfaceCode, SyndromeMeasurement, TopologicalCodeType,
912            TopologicalDecoder,
913        },
914        Anyon, BraidingDirection, BraidingOperation, BraidingResult, FusionRuleSet,
915        NonAbelianAnyonType, TopologicalCapabilities, TopologicalCharge, TopologicalDevice,
916        TopologicalError, TopologicalOperation, TopologicalQubit, TopologicalQubitState,
917        TopologicalResult, TopologicalSystemStatus, TopologicalSystemType,
918    };
919    pub use crate::topology_analysis::{
920        create_standard_topology, AllocationStrategy, HardwareMetrics, TopologyAnalysis,
921        TopologyAnalyzer,
922    };
923    pub use crate::translation::{
924        validate_native_circuit, DecomposedGate, GateTranslator, HardwareBackend, NativeGateSet,
925        OptimizationStrategy, TranslationMethod, TranslationOptimizer, TranslationRule,
926        TranslationStats,
927    };
928    pub use crate::unified_benchmarking::{
929        BaselineMetric, BaselineMetricValue, BenchmarkEvent, PerformanceBaseline,
930        QuantumPlatform as UnifiedQuantumPlatform, UnifiedBenchmarkConfig, UnifiedBenchmarkResult,
931        UnifiedQuantumBenchmarkSystem,
932    };
933    pub use crate::unified_error_handling::{
934        ErrorCategory, ErrorSeverity, RecoveryStrategy, UnifiedDeviceError, UnifiedErrorContext,
935        UnifiedErrorHandler, UnifiedRetryConfig,
936    };
937    pub use crate::vqa_support::{
938        analysis::ConvergenceAnalysis,
939        circuits::ParametricCircuit as VQAParametricCircuit,
940        config::{
941            AdaptiveShotConfig, ConvergenceCriterion as VQAConvergenceCriterion, GradientMethod,
942            MultiStartConfig, OptimizationTrajectory, ResourceUtilization, VQAAlgorithmType,
943            VQAConfig, VQAHardwareAnalysis, VQAHardwareConfig, VQANoiseMitigation,
944            VQAOptimizationConfig, VQAOptimizer, VQAStatisticalAnalysis, VQAStatisticalConfig,
945            VQAValidationConfig, VQAValidationResults, WarmRestartConfig,
946        },
947        executor::{VQAExecutor, VQAResult},
948        objectives::ObjectiveFunction,
949    };
950    pub use crate::zero_noise_extrapolation::{
951        CircuitFolder, ExtrapolationFitter, ExtrapolationMethod, NoiseScalingMethod, Observable,
952        ZNECapable, ZNEConfig, ZNEExecutor, ZNEResult,
953    };
954}