qudit_expr/
lib.rs

1mod analysis;
2mod cache;
3mod codegen;
4mod expressions;
5pub mod index;
6pub mod library;
7mod qgl;
8mod shape;
9
10pub use analysis::simplify_expressions_iter;
11pub use cache::ExpressionCache;
12pub use cache::ExpressionId;
13pub use codegen::CodeGenerator;
14pub use codegen::CompilableUnit;
15pub use codegen::DifferentiationLevel;
16pub use codegen::Module;
17pub use codegen::ModuleBuilder;
18pub use codegen::WriteFunc;
19pub use codegen::WriteFuncWithLifeTime;
20pub use codegen::{FUNCTION, GRADIENT, HESSIAN};
21pub use expressions::BraExpression;
22pub use expressions::BraSystemExpression;
23pub use expressions::ComplexExpression;
24pub use expressions::Constant;
25pub use expressions::Expression;
26pub use expressions::ExpressionGenerator;
27pub use expressions::IsometryExpression;
28pub use expressions::KetExpression;
29pub use expressions::KetSystemExpression;
30pub use expressions::KrausOperatorsExpression;
31pub use expressions::NamedExpression;
32pub use expressions::TensorExpression;
33pub use expressions::UnitaryExpression;
34pub use expressions::UnitarySystemExpression;
35pub use shape::GenerationShape;
36
37////////////////////////////////////////////////////////////////////////
38/// Python Module.
39////////////////////////////////////////////////////////////////////////
40#[cfg(feature = "python")]
41pub(crate) mod python {
42    use pyo3::prelude::{Bound, PyAnyMethods, PyModule, PyModuleMethods, PyResult};
43
44    /// A trait for objects that can register importables with a PyO3 module.
45    pub struct PyExpressionRegistrar {
46        /// The registration function
47        pub func: fn(parent_module: &Bound<'_, PyModule>) -> PyResult<()>,
48    }
49
50    inventory::collect!(PyExpressionRegistrar);
51
52    /// Registers the Circuit submodule with the Python module.
53    fn register(parent_module: &Bound<'_, PyModule>) -> PyResult<()> {
54        let submodule = PyModule::new(parent_module.py(), "expressions")?;
55
56        for registrar in inventory::iter::<PyExpressionRegistrar> {
57            (registrar.func)(&submodule)?;
58        }
59
60        parent_module.add_submodule(&submodule)?;
61        parent_module
62            .py()
63            .import("sys")?
64            .getattr("modules")?
65            .set_item("openqudit.expressions", submodule)?;
66
67        Ok(())
68    }
69
70    inventory::submit!(qudit_core::PyRegistrar { func: register });
71}
72////////////////////////////////////////////////////////////////////////