Skip to main content

qcs_sdk/qpu/
mod.rs

1use std::time::Duration;
2
3use pyo3::{exceptions::PyRuntimeError, pyfunction, PyResult};
4use rigetti_pyo3::{
5    create_init_submodule, py_function_sync_async, py_wrap_error, wrap_error, ToPythonError,
6};
7
8pub use result_data::{PyQpuResultData, PyReadoutValues, RawQpuReadoutData};
9
10pub mod api;
11pub(crate) mod experimental;
12pub mod isa;
13mod result_data;
14pub mod translation;
15
16use crate::client::PyQcsClient;
17
18use self::result_data::PyMemoryValues;
19
20create_init_submodule! {
21    classes: [
22        PyQpuResultData,
23        RawQpuReadoutData,
24        PyReadoutValues,
25        PyMemoryValues
26    ],
27    errors: [
28        ListQuantumProcessorsError
29    ],
30    funcs: [
31        py_list_quantum_processors,
32        py_list_quantum_processors_async
33    ],
34    submodules: [
35        "api": api::init_submodule,
36        "isa": isa::init_submodule,
37        "translation": translation::init_submodule,
38        "experimental": experimental::init_submodule
39    ],
40}
41
42wrap_error!(RustListQuantumProcessorsError(
43    qcs::qpu::ListQuantumProcessorsError
44));
45py_wrap_error!(
46    api,
47    RustListQuantumProcessorsError,
48    ListQuantumProcessorsError,
49    PyRuntimeError
50);
51
52py_function_sync_async! {
53    #[pyfunction]
54    #[pyo3(signature = (client = None, timeout = None))]
55    async fn list_quantum_processors(
56        client: Option<PyQcsClient>,
57        timeout: Option<f64>,
58    ) -> PyResult<Vec<String>> {
59        let client = PyQcsClient::get_or_create_client(client);
60        let timeout = timeout.map(Duration::from_secs_f64);
61        qcs::qpu::list_quantum_processors(&client, timeout)
62            .await
63            .map_err(RustListQuantumProcessorsError::from)
64            .map_err(RustListQuantumProcessorsError::to_py_err)
65    }
66}