qcs_sdk/grpc/models/
controller.rs1use pyo3::{
2 prelude::*,
3 types::{PyComplex, PyInt, PyList},
4};
5use qcs_api_client_grpc::models::controller::{
6 readout_values::Values, Complex64, Complex64ReadoutValues, IntegerReadoutValues, ReadoutValues,
7};
8use rigetti_pyo3::{num_complex::Complex32 as NumComplex32, py_wrap_struct};
9use rigetti_pyo3::{py_wrap_data_struct, py_wrap_union_enum, PyTryFrom, ToPython};
10
11py_wrap_data_struct! {
12 PyReadoutValues(ReadoutValues) as "ReadoutValues" {
13 values: Option<Values> => Option<PyReadoutValuesValues>
14 }
15}
16
17py_wrap_union_enum! {
18 PyReadoutValuesValues(Values) as "ReadoutValuesValues" {
19 integer_values: IntegerValues => PyIntegerReadoutValues,
20 complex_values: ComplexValues => PyComplexReadoutValues
21 }
22}
23
24py_wrap_data_struct! {
25 PyIntegerReadoutValues(IntegerReadoutValues) as "IntegerReadoutValues" {
26 values: Vec<i32> => Vec<Py<PyInt>>
27 }
28}
29
30py_wrap_struct! {
31 PyComplexReadoutValues(Complex64ReadoutValues) as "ComplexReadoutValues" {
32 py -> rs {
33 list: Py<PyList> => Complex64ReadoutValues {
34 let list = <Vec<Py<PyComplex>>>::py_try_from(py, &list)?;
35 let values = list.into_iter().map(|complex| {
36 let complex = NumComplex32::py_try_from(py, &complex)?;
37 Ok::<_, PyErr>(Complex64 {
38 real: complex.re,
39 imaginary: complex.im,
40 })
41 }).collect::<Result<_, _>>()?;
42
43 Ok::<_, PyErr>(Complex64ReadoutValues { values })
44 }
45 },
46 rs -> py {
47 values: Complex64ReadoutValues => Py<PyList> {
48 let list = values.values.into_iter().map(|complex| {
49 NumComplex32 {
50 re: complex.real,
51 im: complex.imaginary,
52 }
53 }).collect::<Vec<_>>();
54
55 list.to_python(py)
56 }
57 }
58 }
59}