#![warn(missing_docs)]
mod circuit;
mod cycle;
mod instruction;
mod operation;
mod param;
mod wire;
pub use circuit::QuditCircuit;
pub use operation::OpCode;
pub use operation::Operation;
pub use param::Argument;
pub use param::ArgumentList;
pub use wire::Wire;
pub use wire::WireList;
#[cfg(feature = "python")]
pub(crate) mod python {
use pyo3::prelude::{Bound, PyAnyMethods, PyModule, PyModuleMethods, PyResult};
pub struct PyCircuitRegistrar {
pub func: fn(parent_module: &Bound<'_, PyModule>) -> PyResult<()>,
}
inventory::collect!(PyCircuitRegistrar);
fn register(parent_module: &Bound<'_, PyModule>) -> PyResult<()> {
let submodule = PyModule::new(parent_module.py(), "circuit")?;
for registrar in inventory::iter::<PyCircuitRegistrar> {
(registrar.func)(&submodule)?;
}
parent_module.add_submodule(&submodule)?;
parent_module
.py()
.import("sys")?
.getattr("modules")?
.set_item("openqudit.circuit", submodule)?;
Ok(())
}
inventory::submit!(qudit_core::PyRegistrar { func: register });
}