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.

Returns the constant Circuit that is executed before each Circuit in circuits.

Returns

  • &Option<Circuit - The constant Circuit (None if not defined).

Returns clone of Measurement with symbolic parameters replaced.

Arguments

  • substituted_parameters - The HashMap containing the substitutions to use in the Circuit.

Returns

  • Ok(Self) - The Circuits with the parameters substituted.
  • Err(RoqoqoError) - The substitution failed.

Implementors