Skip to main content

quil/instruction/
circuit.rs

1use quil_rs::instruction::{CircuitDefinition, Instruction};
2
3use rigetti_pyo3::{
4    impl_repr, py_wrap_data_struct,
5    pyo3::{pymethods, types::PyString, Py, PyResult, Python},
6    PyTryFrom,
7};
8
9use super::PyInstruction;
10use crate::{impl_copy_for_instruction, impl_eq, impl_pickle_for_instruction, impl_to_quil};
11
12py_wrap_data_struct! {
13    #[derive(Debug, PartialEq)]
14    #[pyo3(subclass, module = "quil.instructions")]
15    PyCircuitDefinition(CircuitDefinition) as "CircuitDefinition" {
16        name: String => Py<PyString>,
17        parameters: Vec<String> => Vec<Py<PyString>>,
18        qubit_variables: Vec<String> => Vec<Py<PyString>>,
19        instructions: Vec<Instruction> => Vec<PyInstruction>
20    }
21}
22impl_repr!(PyCircuitDefinition);
23impl_to_quil!(PyCircuitDefinition);
24impl_copy_for_instruction!(PyCircuitDefinition);
25impl_eq!(PyCircuitDefinition);
26impl_pickle_for_instruction!(PyCircuitDefinition);
27
28#[pymethods]
29impl PyCircuitDefinition {
30    #[new]
31    pub fn new(
32        py: Python<'_>,
33        name: String,
34        parameters: Vec<String>,
35        qubit_variables: Vec<String>,
36        instructions: Vec<PyInstruction>,
37    ) -> PyResult<Self> {
38        Ok(Self(CircuitDefinition::new(
39            name,
40            parameters,
41            qubit_variables,
42            Vec::<Instruction>::py_try_from(py, &instructions)?,
43        )))
44    }
45}