Trait roqoqo::measurements::Measure [−][src]
pub trait Measure: PartialEq + Clone {
fn circuits<'a>(&'a self) -> Box<dyn Iterator<Item = &'a Circuit> + 'a>;
fn constant_circuit(&self) -> &Option<Circuit>;
fn substitute_parameters(
&self,
substituted_parameters: HashMap<String, f64>
) -> Result<Self, RoqoqoError>;
}
Expand description
Allows generic interfacing with roqoqo measurements.
Example
// We want to run a measurement for the following expectation value: 3 + 4.0 * < Z0 >.
use roqoqo::{measurements::{BasisRotation, BasisRotationInput, Measure}, registers::BitOutputRegister, Circuit};
use roqoqo::operations::RotateX;
use std::collections::HashMap;
// 1) Initialize our measurement input BasisRotationInput for the BasisRotation measurement
let mut bri = BasisRotationInput::new(3, false);
// 2) Add the pauli products to the input
let _a = bri.add_pauli_product("ro".to_string(), vec![]);
let _b = bri.add_pauli_product("ro".to_string(), vec![0]);
// 3) Add corresponding linear definition of expectation values
let mut linear_map_0: HashMap<usize, f64> = HashMap::new();
linear_map_0.insert(0, 3.0);
bri.add_linear_exp_val("constant".to_string(), linear_map_0).unwrap();
let mut linear_map_1: HashMap<usize, f64> = HashMap::new();
linear_map_1.insert(1, 4.0);
bri.add_linear_exp_val("single_qubit_exp_val".to_string(), linear_map_1).unwrap();
// 4) Construct circuits for the BasisRotation measurement
let mut circs: Vec<Circuit> = Vec::new();
circs.push(Circuit::new());
let mut circ1 = Circuit::new();
circ1 += RotateX::new(0, 0.0.into());
circs.push(circ1);
// 5) Initialize the BasisRotation with the circuits and input defined above
let br = BasisRotation {
constant_circuit: Some(Circuit::new()),
circuits: circs.clone(),
input: bri,
};
// 6) Check that all values are correct
for (index, b) in br.circuits.iter().enumerate() {
assert_eq!(b, circs.get(index).unwrap());
}
assert_eq!(&Circuit::new(), br.constant_circuit.as_ref().unwrap());
Required methods
Returns iterator over circuits for measurement.
The returned circuits have to be executed by the backend and their measurement written into classical registers to evaluate the measurement.
Returns
Box<dyn Iterator<Item = &'a Circuit> + 'a>
- The quantum circuits.
fn constant_circuit(&self) -> &Option<Circuit>
fn constant_circuit(&self) -> &Option<Circuit>
Returns the constant Circuit that is executed before each Circuit in circuits.
Returns
&Option<Circuit
- The constant Circuit (None if not defined).