Download runtime/quantum/benchmarks.rs from Snapkitty/carry-agent: direct link, hf CLI and curl.
- Browser
- Download file 4.99 kB
-
https://huggingface.co/Snapkitty/carry-agent/resolve/main/runtime/quantum/benchmarks.rs
- Command line
-
hf download hf://Snapkitty/carry-agent/runtime/quantum/benchmarks.rs
-
curl -L -o benchmarks.rs https://huggingface.co/Snapkitty/carry-agent/resolve/main/runtime/quantum/benchmarks.rs
4.99 kB
| // CARRY Quantum Simulator Benchmark Suite | |
| // Standard Reference Circuits & Multi-Agent Verification Overhead Benchmark Suite. | |
| use std::time::Instant; | |
| use crate::quantum::core::{Circuit, Gate, QuantumSimulator, SimulationMode, ErrorModel}; | |
| /// Benchmark Summary Result. | |
| pub struct BenchmarkReport { | |
| pub circuit_name: String, | |
| pub num_qubits: usize, | |
| pub num_gates: usize, | |
| pub shots: usize, | |
| pub execution_time_ms: u128, | |
| pub verification_overhead_ms: u128, | |
| pub fidelity: f64, | |
| pub status: String, | |
| } | |
| pub struct BenchmarkSuite; | |
| impl BenchmarkSuite { | |
| /// Build Bell state circuit: H(0), CNOT(0, 1) | |
| pub fn build_bell_circuit() -> Circuit { | |
| let mut circuit = Circuit::new(2); | |
| circuit.add_gate(Gate::h(0)); | |
| circuit.add_gate(Gate::cnot(0, 1)); | |
| circuit | |
| } | |
| /// Build GHZ state circuit: H(0), CNOT(0, 1), CNOT(1, 2) | |
| pub fn build_ghz_circuit(num_qubits: usize) -> Circuit { | |
| let mut circuit = Circuit::new(num_qubits); | |
| circuit.add_gate(Gate::h(0)); | |
| for i in 0..(num_qubits - 1) { | |
| circuit.add_gate(Gate::cnot(i, i + 1)); | |
| } | |
| circuit | |
| } | |
| /// Build Quantum Teleportation circuit (3 qubits) | |
| pub fn build_teleportation_circuit() -> Circuit { | |
| let mut circuit = Circuit::new(3); | |
| // Prepare state on q0: H(0) | |
| circuit.add_gate(Gate::h(0)); | |
| // Entangle Bell pair on q1, q2 | |
| circuit.add_gate(Gate::h(1)); | |
| circuit.add_gate(Gate::cnot(1, 2)); | |
| // Bell measurement on q0, q1 | |
| circuit.add_gate(Gate::cnot(0, 1)); | |
| circuit.add_gate(Gate::h(0)); | |
| // Corrections on q2 | |
| circuit.add_gate(Gate::cnot(1, 2)); | |
| circuit.add_gate(Gate::cz(0, 2)); | |
| circuit | |
| } | |
| /// Build Deutsch-Jozsa circuit (2 qubits) | |
| pub fn build_deutsch_circuit() -> Circuit { | |
| let mut circuit = Circuit::new(2); | |
| circuit.add_gate(Gate::x(1)); | |
| circuit.add_gate(Gate::h(0)); | |
| circuit.add_gate(Gate::h(1)); | |
| // Balanced oracle: CNOT(0, 1) | |
| circuit.add_gate(Gate::cnot(0, 1)); | |
| circuit.add_gate(Gate::h(0)); | |
| circuit | |
| } | |
| /// Build Grover 2-qubit search circuit | |
| pub fn build_grover_circuit() -> Circuit { | |
| let mut circuit = Circuit::new(2); | |
| // Equal superposition | |
| circuit.add_gate(Gate::h(0)); | |
| circuit.add_gate(Gate::h(1)); | |
| // Oracle for |11⟩: CZ(0, 1) | |
| circuit.add_gate(Gate::cz(0, 1)); | |
| // Diffuser: H, X, CZ, X, H | |
| circuit.add_gate(Gate::h(0)); | |
| circuit.add_gate(Gate::h(1)); | |
| circuit.add_gate(Gate::x(0)); | |
| circuit.add_gate(Gate::x(1)); | |
| circuit.add_gate(Gate::cz(0, 1)); | |
| circuit.add_gate(Gate::x(0)); | |
| circuit.add_gate(Gate::x(1)); | |
| circuit.add_gate(Gate::h(0)); | |
| circuit.add_gate(Gate::h(1)); | |
| circuit | |
| } | |
| /// Build QFT (Quantum Fourier Transform) circuit for n qubits | |
| pub fn build_qft_circuit(n: usize) -> Circuit { | |
| let mut circuit = Circuit::new(n); | |
| for i in 0..n { | |
| circuit.add_gate(Gate::h(i)); | |
| for j in (i + 1)..n { | |
| let angle = std::f64::consts::PI / (1 << (j - i)) as f64; | |
| circuit.add_gate(Gate::rz(j, angle)); | |
| circuit.add_gate(Gate::cz(i, j)); | |
| } | |
| } | |
| for i in 0..(n / 2) { | |
| circuit.add_gate(Gate::swap(i, n - 1 - i)); | |
| } | |
| circuit | |
| } | |
| /// Run full benchmark for a given circuit with execution timing & verification overhead measurement. | |
| pub fn run_benchmark(name: &str, circuit: &Circuit, shots: usize) -> Result<BenchmarkReport, String> { | |
| let start_time = Instant::now(); | |
| let mut sim = QuantumSimulator::new(circuit.num_qubits, SimulationMode::StateVector, ErrorModel::None); | |
| // Execute circuit gates | |
| for gate in &circuit.gates { | |
| sim.apply_gate(gate)?; | |
| } | |
| let exec_time = start_time.elapsed().as_millis(); | |
| // Verification overhead timing | |
| let verify_start = Instant::now(); | |
| let _purity = sim.state.purity(); | |
| let _valid = sim.state.is_valid_state(); | |
| let verify_time = verify_start.elapsed().as_millis(); | |
| Ok(BenchmarkReport { | |
| circuit_name: name.to_string(), | |
| num_qubits: circuit.num_qubits, | |
| num_gates: circuit.gates.len(), | |
| shots, | |
| execution_time_ms: exec_time, | |
| verification_overhead_ms: verify_time, | |
| // WC-3 fix: compute actual fidelity as post-circuit norm validity. | |
| // 1.0 = state remains normalised; values < 1.0 indicate drift. | |
| fidelity: if _valid { 1.0 - (_purity - 1.0).abs().min(1.0) } else { 0.0 }, | |
| status: "SUCCESS".to_string(), | |
| }) | |
| } | |
| } | |