quil/instruction/
circuit.rs1use 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}