#![allow(clippy::pedantic, clippy::unreadable_literal)]
use quantrs2::utils::*;
use std::time::Duration;
fn main() {
println!("=== QuantRS2 Utility Functions Example ===\n");
println!("1. Memory Estimation:");
for num_qubits in [10, 20, 25, 30, 35] {
let mem_bytes = estimate_statevector_memory(num_qubits);
println!(
" {} qubits requires: {}",
num_qubits,
format_memory(mem_bytes)
);
}
println!();
println!("2. Memory Validation:");
let available_memory = 8 * 1024 * 1024 * 1024; println!(" Available memory: {}", format_memory(available_memory));
for num_qubits in [20, 25, 28, 30, 32] {
let is_valid = is_valid_qubit_count(num_qubits, available_memory);
let status = if is_valid { "✓ CAN" } else { "✗ CANNOT" };
println!(" {status} simulate {num_qubits} qubits");
}
println!();
println!("3. Maximum Qubit Calculations:");
for mem_gb in [1, 4, 8, 16, 32, 64] {
let mem_bytes = mem_gb * 1024 * 1024 * 1024;
let max_qubits = max_qubits_for_memory(mem_bytes);
println!(" {mem_gb} GB → max {max_qubits} qubits");
}
println!();
println!("4. Memory Formatting:");
let sizes = [
512,
1024,
1024 * 1024,
1536 * 1024 * 1024,
2 * 1024 * 1024 * 1024,
];
for size in sizes {
println!(" {} bytes = {}", size, format_memory(size));
}
println!();
println!("5. Duration Formatting:");
let durations = [
Duration::from_micros(500),
Duration::from_millis(250),
Duration::from_millis(1500),
Duration::from_secs(5),
Duration::from_secs(90),
];
for duration in durations {
println!(" {:?} = {}", duration, format_duration(duration));
}
println!();
println!("6. Range Validation:");
let test_values = [0, 5, 10, 15, 20];
let (min, max) = (5, 15);
println!(" Valid range: [{min}, {max}]");
for value in test_values {
let in_range = is_in_range(&value, &min, &max);
let status = if in_range { "✓" } else { "✗" };
println!(
" {} Value {} is {}",
status,
value,
if in_range { "valid" } else { "invalid" }
);
}
println!();
println!("7. Binomial Coefficients:");
println!(" Pascal's Triangle (first 6 rows):");
for n in 0..6 {
print!(" n={n}: ");
for k in 0..=n {
print!("{:4} ", binomial(n, k));
}
println!();
}
println!();
println!("8. Factorials:");
for n in 0..=10 {
println!(" {}! = {}", n, factorial(n));
}
println!();
println!("9. Practical Example - Circuit Complexity:");
let num_qubits = 10;
let circuit_depth = 20;
let gates_per_layer = 5;
println!(" Quantum Circuit:");
println!(" - Qubits: {num_qubits}");
println!(" - Depth: {circuit_depth}");
println!(" - Gates per layer: {gates_per_layer}");
println!();
println!(" Resource Requirements:");
println!(
" - State vector memory: {}",
format_memory(estimate_statevector_memory(num_qubits))
);
println!(
" - Minimum RAM needed: {}",
format_memory(estimate_statevector_memory(num_qubits) * 2)
); println!(" - Total gates: {}", circuit_depth * gates_per_layer);
println!();
let microseconds_per_gate = 10;
let total_time_us = (circuit_depth * gates_per_layer) as u64 * microseconds_per_gate;
let estimated_duration = Duration::from_micros(total_time_us);
println!(
" - Estimated execution time: {}",
format_duration(estimated_duration)
);
println!();
println!("=== Example Complete ===");
}