Skip to main content

laddu_runtime/
lib.rs

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