quantrs2-device 0.1.0-alpha.5

Quantum device connectors for the QuantRS2 framework
docs.rs failed to build quantrs2-device-0.1.0-alpha.5
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: quantrs2-device-0.1.0-alpha.4

QuantRS2-Device: Universal Quantum Hardware Interface

Crates.io Documentation License

QuantRS2-Device is the comprehensive quantum hardware abstraction layer of the QuantRS2 quantum computing framework, providing seamless connectivity to quantum computers from major cloud providers, with advanced transpilation, optimization, and characterization capabilities for production quantum computing applications.

Core Features

Multi-Provider Cloud Integration

  • IBM Quantum Network: Full integration with IBM Quantum Experience, Qiskit Runtime, and premium backends
  • Azure Quantum Platform: Access to Microsoft's quantum ecosystem including IonQ, Quantinuum, and Rigetti
  • AWS Braket Service: Integration with Amazon's quantum computing platform and hardware partners
  • Google Quantum AI: Planned integration with Google's quantum processors and Cirq ecosystem
  • Unified API: Consistent interface across all providers with automatic provider detection

Advanced Hardware Abstraction

  • Device Characterization: Real-time calibration data integration and noise characterization
  • Hardware-Aware Compilation: Automatic circuit transpilation with provider-specific optimizations
  • Pulse-Level Control: Direct pulse sequence generation for supported hardware
  • Topology-Aware Routing: Intelligent qubit mapping with SWAP insertion optimization
  • Cross-Talk Mitigation: Advanced scheduling algorithms to minimize quantum interference

Production-Ready Features

  • Asynchronous Execution: Non-blocking job submission with real-time status monitoring
  • Batch Processing: Efficient execution of multiple circuits with resource optimization
  • Error Mitigation: Zero-noise extrapolation, virtual distillation, and readout correction
  • Cost Optimization: Intelligent job scheduling and resource allocation across providers
  • Fault Tolerance: Automatic retry mechanisms with exponential backoff strategies

Performance & Reliability

  • Circuit Validation: Pre-flight checks for hardware compatibility and constraints
  • Queue Management: Real-time queue monitoring with estimated execution times
  • Resource Estimation: Accurate cost and time predictions for circuit execution
  • Result Caching: Intelligent caching of circuit results and calibration data
  • Monitoring & Telemetry: Comprehensive logging and performance metrics

Usage

IBM Quantum

use quantrs2_circuit::builder::Circuit;
use quantrs2_device::{create_ibm_client, create_ibm_device, prelude::*};

#[cfg(feature = "ibm")]
async fn run_on_ibm() -> Result<(), Box<dyn std::error::Error>> {
    // Create a bell state circuit
    let mut circuit = Circuit::<2>::new();
    circuit.h(0)?
           .cnot(0, 1)?;
    
    // Get API token (from environment or config)
    let token = std::env::var("IBM_QUANTUM_TOKEN")?;
    
    // Connect to IBM Quantum
    let device = create_ibm_device(&token, "ibmq_qasm_simulator", None).await?;
    
    // Execute circuit with 1024 shots
    let result = device.execute_circuit(&circuit, 1024).await?;
    
    // Process results
    for (outcome, count) in result.counts {
        println!("{}: {}", outcome, count);
    }
    
    Ok(())
}

Azure Quantum

use quantrs2_circuit::builder::Circuit;
use quantrs2_device::{create_azure_client, create_azure_device, prelude::*};

#[cfg(feature = "azure")]
async fn run_on_azure() -> Result<(), Box<dyn std::error::Error>> {
    // Create a circuit
    let mut circuit = Circuit::<2>::new();
    circuit.h(0)?
           .cnot(0, 1)?;
    
    // Azure credentials
    let token = std::env::var("AZURE_TOKEN")?;
    let subscription = std::env::var("AZURE_SUBSCRIPTION_ID")?;
    let resource_group = "my-resource-group";
    let workspace = "my-workspace";
    
    // Create Azure client
    let client = create_azure_client(
        &token, 
        &subscription, 
        resource_group, 
        workspace, 
        None
    )?;
    
    // Connect to a specific provider's device
    let device = create_azure_device(
        client, 
        "ionq.simulator", 
        Some("ionq"), 
        None
    ).await?;
    
    // Execute circuit
    let result = device.execute_circuit(&circuit, 500).await?;
    
    // Process results
    for (outcome, count) in result.counts {
        println!("{}: {}", outcome, count);
    }
    
    Ok(())
}

AWS Braket

use quantrs2_circuit::builder::Circuit;
use quantrs2_device::{create_aws_client, create_aws_device, prelude::*};

#[cfg(feature = "aws")]
async fn run_on_aws() -> Result<(), Box<dyn std::error::Error>> {
    // Create a circuit
    let mut circuit = Circuit::<2>::new();
    circuit.h(0)?
           .cnot(0, 1)?;
    
    // AWS credentials
    let access_key = std::env::var("AWS_ACCESS_KEY_ID")?;
    let secret_key = std::env::var("AWS_SECRET_ACCESS_KEY")?;
    let bucket = "my-quantum-results";
    
    // Create AWS client
    let client = create_aws_client(
        &access_key, 
        &secret_key, 
        Some("us-east-1"), 
        bucket, 
        None
    )?;
    
    // Connect to SV1 simulator
    let device = create_aws_device(
        client,
        "arn:aws:braket:::device/quantum-simulator/amazon/sv1",
        None
    ).await?;
    
    // Execute circuit
    let result = device.execute_circuit(&circuit, 1000).await?;
    
    // Process results
    for (outcome, count) in result.counts {
        println!("{}: {}", outcome, count);
    }
    
    Ok(())
}

Module Structure

  • ibm.rs / ibm_device.rs: IBM Quantum client and device support
  • azure.rs / azure_device.rs: Azure Quantum client and device support
  • aws.rs / aws_device.rs: AWS Braket client and device support
  • transpiler.rs: Circuit transformation for hardware constraints

Core Types

  • QuantumDevice: Trait representing quantum hardware capabilities
  • CircuitExecutor: Trait for devices that can run quantum circuits
  • CircuitResult: Standard result format for quantum executions

Feature Flags

  • ibm: Enables IBM Quantum connectivity
  • azure: Enables Azure Quantum connectivity
  • aws: Enables AWS Braket connectivity

Each feature flag can be enabled independently to minimize dependencies.

Technical Details

  • Async/await is used for non-blocking network operations
  • Each provider has specific authentication and configuration requirements
  • The circuit transpiler adapts circuits to provider-specific gate sets
  • Error types are standardized across providers

Future Plans

See TODO.md for planned features.

Integration with Other QuantRS2 Modules

This module is designed to work seamlessly with:

License

This project is licensed under either:

at your option.