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}