diff options
| author | hachem <im@hachem.wtf> | 2024-09-27 16:26:14 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2024-09-27 16:26:14 +0200 |
| commit | 82e938a96cc6b38ac1a75215cae56f100d1e7bb8 (patch) | |
| tree | e7d1536731e607ac5cf2c7675817d1bd2986764b /libpsi-tester/src/main.rs | |
| parent | 1070a7ee073471af8442826cec54e720be266c7c (diff) | |
BasicRT first implementation
Diffstat (limited to 'libpsi-tester/src/main.rs')
| -rw-r--r-- | libpsi-tester/src/main.rs | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/libpsi-tester/src/main.rs b/libpsi-tester/src/main.rs index 2de001b..180df98 100644 --- a/libpsi-tester/src/main.rs +++ b/libpsi-tester/src/main.rs @@ -1,9 +1,37 @@ use libpsi_core::*; +fn count_qubit_states(measurements: &[Vec<i32>], num_qubits: usize) -> Vec<i32> { + let mut counts = vec![0; num_qubits * 2]; + for measurement in measurements { + for (i, &state) in measurement.iter().enumerate() { + if state == 0 { + counts[i] += 1; + } else { + counts[num_qubits + i] += 1; + } + } + } + counts +} + fn main() { - let mut circuit = QuantumCircuit::new(2, 2); - circuit.apply(&gates::CNOT, &[0], &[1]); + let mut circuit = QuantumCircuit::new(1, 1); + circuit.apply(&gates::HADAMARD, &[], &[0]); let runtime = BasicRT::new(circuit); - runtime.execute(1024); + let execution_count = 1024; + let executions = runtime.execute(execution_count); + + let mut measurements = Vec::new(); + for execution in executions { + let bits = execution.classical_states.get_bits(); + measurements.push(bits.clone()); + } + + let counts = count_qubit_states(&measurements, 1); + println!( + "{:.2} * |0> + {:.2} * |1>", + (counts[0] as f32) / execution_count as f32, + (counts[1] as f32) / execution_count as f32 + ); } |
