Skip to main content

quil/instruction/
measurement.rs

1use quil_rs::instruction::{Measurement, MemoryReference, Qubit};
2use rigetti_pyo3::{
3    impl_hash, impl_repr, py_wrap_data_struct,
4    pyo3::{pymethods, PyResult, Python},
5    PyTryFrom,
6};
7
8use crate::{
9    impl_copy_for_instruction, impl_eq, impl_pickle_for_instruction, impl_to_quil,
10    instruction::{PyMemoryReference, PyQubit},
11};
12
13py_wrap_data_struct! {
14    #[derive(Debug, PartialEq, Eq)]
15    #[pyo3(subclass, module = "quil.instructions")]
16    PyMeasurement(Measurement) as "Measurement" {
17        qubit: Qubit => PyQubit,
18        target: Option<MemoryReference> => Option<PyMemoryReference>
19    }
20}
21impl_to_quil!(PyMeasurement);
22impl_copy_for_instruction!(PyMeasurement);
23impl_hash!(PyMeasurement);
24impl_repr!(PyMeasurement);
25impl_eq!(PyMeasurement);
26impl_pickle_for_instruction!(PyMeasurement);
27
28#[pymethods]
29impl PyMeasurement {
30    #[new]
31    pub fn new(
32        py: Python<'_>,
33        qubit: PyQubit,
34        target: Option<PyMemoryReference>,
35    ) -> PyResult<PyMeasurement> {
36        Ok(Self(Measurement::new(
37            Qubit::py_try_from(py, &qubit)?,
38            Option::<MemoryReference>::py_try_from(py, &target)?,
39        )))
40    }
41}