aboutsummaryrefslogtreecommitdiff
path: root/libpsi-core/src/core/circuit.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libpsi-core/src/core/circuit.rs')
-rw-r--r--libpsi-core/src/core/circuit.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/libpsi-core/src/core/circuit.rs b/libpsi-core/src/core/circuit.rs
index e5d7847..d0e4450 100644
--- a/libpsi-core/src/core/circuit.rs
+++ b/libpsi-core/src/core/circuit.rs
@@ -1,4 +1,4 @@
-use super::{CustomGate, QuantumState, Runtime};
+use super::{CustomGate, QuantumState, Runtime, RuntimeConfig};
use crate::{format_amplitude, format_probability, Vector};
use core::fmt;
use std::sync::Arc;
@@ -193,6 +193,15 @@ impl QuantumCircuit {
self.computed_state.as_ref().unwrap()
}
+ pub fn compute_with_config(&mut self, config: RuntimeConfig) -> &QuantumState {
+ if self.computed_state.is_some() {
+ return self.computed_state.as_ref().unwrap();
+ }
+
+ self.computed_state = Some(config.compute(self.num_qubits, &self.operations));
+ self.computed_state.as_ref().unwrap()
+ }
+
pub fn state(&mut self) -> &QuantumState {
self.compute()
}
@@ -201,6 +210,10 @@ impl QuantumCircuit {
self.compute_with(runtime)
}
+ pub fn state_with_config(&mut self, config: RuntimeConfig) -> &QuantumState {
+ self.compute_with_config(config)
+ }
+
pub fn h(&mut self, target: usize) -> &mut Self {
self.operations.push(GateOp::H(target));
self.computed_state = None;