From d65b1c55782f6a9d89cd5bc7c7337397dcf4b85c Mon Sep 17 00:00:00 2001 From: hachem Date: Tue, 24 Sep 2024 21:44:48 +0200 Subject: Prepare for quantum circuit --- Cargo.toml | 2 +- libpsi-core/src/core/circuit.rs | 25 +++++++++++++++++++++++++ libpsi-core/src/core/component.rs | 2 +- libpsi-core/src/core/mod.rs | 3 +++ libpsi-core/src/lib.rs | 1 + libpsi-tester/Cargo.toml | 2 +- libpsi-tester/src/main.rs | 20 ++------------------ 7 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 libpsi-core/src/core/circuit.rs diff --git a/Cargo.toml b/Cargo.toml index d82fbd0..05cf0fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" members = [ - "libpsi", + "libpsi-core", "libpsi-tester" ] \ No newline at end of file diff --git a/libpsi-core/src/core/circuit.rs b/libpsi-core/src/core/circuit.rs new file mode 100644 index 0000000..65e359a --- /dev/null +++ b/libpsi-core/src/core/circuit.rs @@ -0,0 +1,25 @@ +use super::{ClassicalRegister, QuantumBit, QuantumGate}; + +#[allow(dead_code)] +struct QuantumCircuitInstruction { + target_indices: Vec, + control_indices: Vec, + gate: QuantumGate, +} + +#[allow(dead_code)] +pub struct QuantumCircuit { + quantum_bits: Vec, + classical_register: ClassicalRegister, + instructions: Vec, +} + +impl QuantumCircuit { + pub fn new(quantum_bit_count: usize, classical_bit_count: usize) -> QuantumCircuit { + QuantumCircuit { + quantum_bits: Vec::with_capacity(quantum_bit_count), + classical_register: ClassicalRegister::new(classical_bit_count), + instructions: Vec::new(), + } + } +} diff --git a/libpsi-core/src/core/component.rs b/libpsi-core/src/core/component.rs index 41b7cc7..00462e5 100644 --- a/libpsi-core/src/core/component.rs +++ b/libpsi-core/src/core/component.rs @@ -1,5 +1,5 @@ use crate::{complex, ColumnVector, Complex, Matrix, Vector, VectorMatrix}; -use core::{fmt, ops}; +use core::ops; pub type QuantumBit = ColumnVector>; pub type QuantumGate = Matrix>; diff --git a/libpsi-core/src/core/mod.rs b/libpsi-core/src/core/mod.rs index 374c555..2f42682 100644 --- a/libpsi-core/src/core/mod.rs +++ b/libpsi-core/src/core/mod.rs @@ -1,4 +1,7 @@ +pub mod circuit; pub mod component; pub mod gates; +pub use circuit::*; +pub use component::*; pub use gates::*; diff --git a/libpsi-core/src/lib.rs b/libpsi-core/src/lib.rs index af50663..45c2c3b 100644 --- a/libpsi-core/src/lib.rs +++ b/libpsi-core/src/lib.rs @@ -6,5 +6,6 @@ pub use maths::matrix::*; pub use maths::numeric_traits::*; pub use maths::vector::*; +pub use core::circuit::*; pub use core::component::*; pub use core::gates; diff --git a/libpsi-tester/Cargo.toml b/libpsi-tester/Cargo.toml index 6e6ae37..bfa4611 100644 --- a/libpsi-tester/Cargo.toml +++ b/libpsi-tester/Cargo.toml @@ -4,4 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] -libpsi = { path = "../libpsi" } \ No newline at end of file +libpsi-core = { path = "../libpsi-core" } \ No newline at end of file diff --git a/libpsi-tester/src/main.rs b/libpsi-tester/src/main.rs index 08229f2..3fd8de2 100644 --- a/libpsi-tester/src/main.rs +++ b/libpsi-tester/src/main.rs @@ -1,21 +1,5 @@ -use libpsi::*; +use libpsi_core::*; fn main() { - let mut quantum_register = quantum_register![QuantumBit::state_0()]; - let mut classical_register = ClassicalRegister::new(1); - - quantum_register.measure(&mut classical_register); - println!("|{}>", classical_register[0]); - - quantum_register.apply(&gates::HADAMARD, 0); - quantum_register.measure(&mut classical_register); - println!("|{}>", classical_register[0]); - - quantum_register.apply(&gates::HADAMARD, 0); - quantum_register.measure(&mut classical_register); - println!("|{}>", classical_register[0]); - - quantum_register.apply(&gates::HADAMARD, 0); - quantum_register.measure(&mut classical_register); - println!("|{}>", classical_register[0]); + let _circuit = QuantumCircuit::new(2, 2); } -- cgit v1.3