1#![recursion_limit = "256"]
5
6mod backend;
7mod cpu;
8mod error;
9mod execution;
10#[cfg(feature = "jit")]
11mod jit;
12mod normalization;
13mod preparation;
14mod query;
15
16pub use backend::{PreparedDataset, PreparedModel};
17pub use cpu::*;
18pub use error::{ExecutionError, RuntimeError, RuntimeResult};
19pub use execution::{
20 CpuOptions, Device, Execution, ExecutionOptions, GpuBackend, GpuDeviceSelector, GpuOptions,
21 JitPolicy, NormalizationMode, Precision, ThreadPolicy,
22};
23pub use laddu_memory::{
24 CapacitySource, DeviceIdentity, MemoryBudget, MemoryDecision, MemoryError, MemoryLease,
25 MemoryPlan, MemoryPool, MemoryPoolReport, MemoryReport, MemoryResource, MemoryResourceKind,
26 MemoryState, ProcessMemoryReport,
27};
28pub use laddu_physics::binning::{
29 BinningAxis, FinalUpperEdge, bin_shape, checked_bin_count, flat_bin_index,
30 flat_bin_index_for_event,
31};
32pub use laddu_physics::joint_histogram::{JointHistogram, JointHistogramDiagnostics};
33pub use normalization::{PreparedNormalization, PreparedNormalizationDiagnostics};
34pub use query::{
35 BinSpec, Comparison, DatasetBin, DatasetExprExt, IntervalClosure, Predicate, PreparedQuery,
36};
37
38use laddu_compile::CompiledModel;
39use laddu_expr::ExprNode;
40
41pub(crate) fn required_event_scalars(model: &CompiledModel) -> Vec<String> {
42 let mut required = Vec::new();
43 for node in model.graph().nodes() {
44 if let ExprNode::EventScalar(name) = node
45 && !required.iter().any(|required| required == name.as_ref())
46 {
47 required.push(name.to_string());
48 }
49 }
50 required
51}