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#[cfg(feature = "python")]
41pub(crate) mod python {
42 use pyo3::prelude::{Bound, PyAnyMethods, PyModule, PyModuleMethods, PyResult};
43
44 pub struct PyExpressionRegistrar {
46 pub func: fn(parent_module: &Bound<'_, PyModule>) -> PyResult<()>,
48 }
49
50 inventory::collect!(PyExpressionRegistrar);
51
52 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