Crates.io | quantrs2-device |
lib.rs | quantrs2-device |
version | 0.1.0-alpha.5 |
created_at | 2025-05-13 01:57:57.181885+00 |
updated_at | 2025-06-17 11:55:33.278255+00 |
description | Quantum device connectors for the QuantRS2 framework |
homepage | |
repository | https://github.com/cool-japan/quantrs |
max_upload_size | |
id | 1671318 |
size | 6,440,030 |
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.
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(())
}
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(())
}
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(())
}
QuantumDevice
: Trait representing quantum hardware capabilitiesCircuitExecutor
: Trait for devices that can run quantum circuitsCircuitResult
: Standard result format for quantum executionsEach feature flag can be enabled independently to minimize dependencies.
See TODO.md for planned features.
This module is designed to work seamlessly with:
This project is licensed under either:
at your option.