#![allow(clippy::pedantic, clippy::unreadable_literal)]
use quantrs2::prelude::essentials::*;
use quantrs2::{config, diagnostics, version};
fn main() {
println!("=== QuantRS2 Basic Usage Example ===\n");
println!("1. Version Information:");
println!(" QuantRS2 version: {}", version::VERSION);
println!(" SciRS2 version: {}", version::SCIRS2_VERSION);
println!(" Rust compiler: {}", version::RUSTC_VERSION);
println!(" Build timestamp: {}", version::BUILD_TIMESTAMP);
println!();
println!("2. Detailed Version Info:");
let version_info = version::VersionInfo::current();
println!(" {version_info}");
println!();
println!("3. Global Configuration:");
let cfg = config::Config::global();
println!(" CPU cores: {}", num_cpus::get());
println!(
" Configured threads: {}",
cfg.num_threads()
.map_or_else(|| "auto".to_string(), |n| n.to_string())
);
println!(" Log level: {}", cfg.log_level().as_str());
println!(" Default backend: {}", cfg.default_backend().as_str());
println!(" GPU enabled: {}", cfg.is_gpu_enabled());
println!(" SIMD enabled: {}", cfg.is_simd_enabled());
println!();
println!("4. Modifying Configuration:");
cfg.set_num_threads(4);
cfg.set_log_level(config::LogLevel::Info);
println!(" Set threads to: 4");
println!(" Set log level to: info");
println!(" Current threads: {:?}", cfg.num_threads());
println!();
println!("5. System Diagnostics:");
let report = diagnostics::run_diagnostics();
println!(" {}", report.summary());
println!();
if report.is_ready() {
println!(" ✓ System is READY for quantum simulation!");
} else {
println!(" ✗ System has issues - review diagnostics");
for error in report.errors() {
println!(" ERROR: {error}");
}
for warning in report.warnings() {
println!(" WARNING: {warning}");
}
}
println!();
println!("6. Compatibility Check:");
match version::check_compatibility() {
Ok(()) => println!(" ✓ All compatibility checks passed!"),
Err(issues) => {
println!(" ✗ Compatibility issues found:");
for issue in issues {
println!(" - {issue}");
}
}
}
println!();
println!("7. Basic Quantum Types:");
let q0 = QubitId::new(0);
let q1 = QubitId::new(1);
let q2 = QubitId::new(2);
println!(
" Created qubits: q0={}, q1={}, q2={}",
q0.id(),
q1.id(),
q2.id()
);
println!();
println!("8. Error Handling:");
use quantrs2::error::{ErrorCategory, QuantRS2ErrorExt};
let err = QuantRS2Error::InvalidQubitId(42);
println!(" Error: {err}");
println!(" Category: {:?}", err.category());
println!(" Is recoverable: {}", err.is_recoverable());
println!(" User message: {}", err.user_message());
println!();
println!("=== Example Complete ===");
}