quil/instruction/
timing.rs1use quil_rs::expression::Expression;
2use quil_rs::instruction::{Delay, Fence, Qubit};
3
4use rigetti_pyo3::{
5 impl_hash, impl_repr, py_wrap_data_struct,
6 pyo3::{pymethods, types::PyString, Py, PyResult, Python},
7 PyTryFrom,
8};
9
10use super::PyQubit;
11use crate::impl_pickle_for_instruction;
12use crate::{expression::PyExpression, impl_copy_for_instruction, impl_eq, impl_to_quil};
13
14py_wrap_data_struct! {
15 #[derive(Debug, PartialEq, Eq)]
16 #[pyo3(subclass, module = "quil.instructions")]
17 PyDelay(Delay) as "Delay" {
18 duration: Expression => PyExpression,
19 frame_names: Vec<String> => Vec<Py<PyString>>,
20 qubits: Vec<Qubit> => Vec<PyQubit>
21 }
22}
23impl_repr!(PyDelay);
24impl_to_quil!(PyDelay);
25impl_copy_for_instruction!(PyDelay);
26impl_hash!(PyDelay);
27impl_eq!(PyDelay);
28impl_pickle_for_instruction!(PyDelay);
29
30#[pymethods]
31impl PyDelay {
32 #[new]
33 pub fn new(
34 py: Python<'_>,
35 duration: PyExpression,
36 frame_names: Vec<String>,
37 qubits: Vec<PyQubit>,
38 ) -> PyResult<Self> {
39 Ok(Self(Delay::new(
40 Expression::py_try_from(py, &duration)?,
41 frame_names,
42 Vec::<Qubit>::py_try_from(py, &qubits)?,
43 )))
44 }
45}
46
47py_wrap_data_struct! {
48 #[derive(Debug, PartialEq, Eq)]
49 #[pyo3(subclass, module = "quil.instructions")]
50 PyFence(Fence) as "Fence" {
51 qubits: Vec<Qubit> => Vec<PyQubit>
52 }
53}
54impl_repr!(PyFence);
55impl_to_quil!(PyFence);
56impl_copy_for_instruction!(PyFence);
57impl_hash!(PyFence);
58impl_eq!(PyFence);
59impl_pickle_for_instruction!(PyFence);
60
61#[pymethods]
62impl PyFence {
63 #[new]
64 pub fn new(py: Python<'_>, qubits: Vec<PyQubit>) -> PyResult<Self> {
65 Ok(Self(Fence::new(Vec::<Qubit>::py_try_from(py, &qubits)?)))
66 }
67}