diff options
Diffstat (limited to 'libpsi-core/src/core')
| -rw-r--r-- | libpsi-core/src/core/circuit.rs | 12 | ||||
| -rw-r--r-- | libpsi-core/src/core/mod.rs | 2 | ||||
| -rw-r--r-- | libpsi-core/src/core/runtime.rs | 25 |
3 files changed, 37 insertions, 2 deletions
diff --git a/libpsi-core/src/core/circuit.rs b/libpsi-core/src/core/circuit.rs index 65e359a..43f51d0 100644 --- a/libpsi-core/src/core/circuit.rs +++ b/libpsi-core/src/core/circuit.rs @@ -2,8 +2,8 @@ use super::{ClassicalRegister, QuantumBit, QuantumGate}; #[allow(dead_code)] struct QuantumCircuitInstruction { - target_indices: Vec<i32>, - control_indices: Vec<i32>, + target_indices: Vec<usize>, + control_indices: Vec<usize>, gate: QuantumGate, } @@ -22,4 +22,12 @@ impl QuantumCircuit { instructions: Vec::new(), } } + + pub fn apply(&mut self, gate: &QuantumGate, control_bits: &[usize], target_bits: &[usize]) { + self.instructions.push(QuantumCircuitInstruction { + gate: gate.clone(), + target_indices: target_bits.to_vec(), + control_indices: control_bits.to_vec(), + }); + } } diff --git a/libpsi-core/src/core/mod.rs b/libpsi-core/src/core/mod.rs index 2f42682..e8e2a4b 100644 --- a/libpsi-core/src/core/mod.rs +++ b/libpsi-core/src/core/mod.rs @@ -1,7 +1,9 @@ pub mod circuit; pub mod component; pub mod gates; +pub mod runtime; pub use circuit::*; pub use component::*; pub use gates::*; +pub use runtime::*; diff --git a/libpsi-core/src/core/runtime.rs b/libpsi-core/src/core/runtime.rs new file mode 100644 index 0000000..f699d54 --- /dev/null +++ b/libpsi-core/src/core/runtime.rs @@ -0,0 +1,25 @@ +use super::{ClassicalRegister, QuantumBit, QuantumCircuit}; + +#[allow(unused)] +pub struct ExecutationData { + quantum_states: Vec<QuantumBit>, + classical_states: ClassicalRegister, +} + +impl ExecutationData { + pub fn new(quantum_states: Vec<QuantumBit>, classical_states: ClassicalRegister) -> Self { + ExecutationData { + quantum_states, + classical_states, + } + } +} + +pub trait RuntimeBase { + fn get_circuit(&self) -> &QuantumCircuit; +} + +pub trait Runtime<T: RuntimeBase = Self> { + fn new(circuit: QuantumCircuit) -> Self; + fn execute(&self, repeat: usize) -> Vec<ExecutationData>; +} |
