Skip to main content

laddu_runtime/
lib.rs

1//! Execution backends, dataset queries, and reduction support for compiled `laddu` models.
2
3// WGPU's nested resource types require deeper Send/Sync trait evaluation.
4#![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}