aboutsummaryrefslogtreecommitdiff
path: root/libpsi-tester
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2024-09-27 16:26:14 +0200
committerhachem <im@hachem.wtf>2024-09-27 16:26:14 +0200
commit82e938a96cc6b38ac1a75215cae56f100d1e7bb8 (patch)
treee7d1536731e607ac5cf2c7675817d1bd2986764b /libpsi-tester
parent1070a7ee073471af8442826cec54e720be266c7c (diff)
BasicRT first implementation
Diffstat (limited to 'libpsi-tester')
-rw-r--r--libpsi-tester/src/main.rs34
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
+ );
}