Skip to main content

irithyll_core/
lib.rs

1//! Core types and inference engine for irithyll streaming ML models.
2//!
3//! `irithyll-core` provides loss functions, observation traits, a compact binary
4//! format, and branch-free traversal for deploying trained SGBT models on
5//! embedded targets (Cortex-M0+, 32KB flash).
6//!
7//! # Features
8//!
9//! - **Loss functions** — squared, logistic, Huber, softmax, expectile, quantile
10//! - **Observation trait** — zero-copy training interface with `SampleRef`
11//! - **12-byte packed nodes** — 5 nodes per 64-byte cache line
12//! - **Zero-copy `EnsembleView`** — constructed from `&[u8]`, no allocation after validation
13//! - **Branch-free traversal** — `cmov`/`csel` child selection, no pipeline stalls
14//! - **`#![no_std]`** — zero mandatory dependencies, runs on bare metal
15//!
16//! # Usage
17//!
18//! ```ignore
19//! use irithyll_core::{EnsembleView, FormatError};
20//!
21//! // Load packed binary (e.g. from flash, file, or network)
22//! let packed_bytes: &[u8] = &[/* exported via irithyll::export_embedded() */];
23//! let view = EnsembleView::from_bytes(packed_bytes)?;
24//! let prediction = view.predict(&[1.0f32, 2.0, 3.0]);
25//! ```
26
27#![no_std]
28#![deny(unsafe_op_in_unsafe_fn)]
29#![cfg_attr(docsrs, feature(doc_cfg))]
30
31#[cfg(feature = "alloc")]
32extern crate alloc;
33
34#[cfg(feature = "std")]
35extern crate std;
36
37#[cfg(all(test, not(feature = "alloc")))]
38extern crate alloc;
39
40pub mod drift;
41pub mod error;
42pub mod loss;
43pub mod math;
44pub mod packed;
45pub mod packed_i16;
46pub mod quantize;
47pub mod sample;
48pub mod traverse;
49pub mod traverse_i16;
50pub mod view;
51pub mod view_i16;
52
53#[cfg(feature = "alloc")]
54#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
55pub mod histogram;
56
57#[cfg(feature = "alloc")]
58#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
59pub mod feature;
60
61#[cfg(feature = "alloc")]
62#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
63pub mod learner;
64
65#[cfg(feature = "alloc")]
66#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
67pub mod tree;
68
69#[cfg(feature = "alloc")]
70#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
71pub mod ensemble;
72
73#[cfg(feature = "alloc")]
74#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
75pub mod reservoir;
76
77#[cfg(feature = "alloc")]
78#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
79pub mod snn;
80
81#[cfg(feature = "alloc")]
82#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
83pub mod ssm;
84
85// Convenience re-exports -- inference
86pub use error::FormatError;
87pub use packed::{EnsembleHeader, PackedNode, TreeEntry};
88pub use packed_i16::{PackedNodeI16, QuantizedEnsembleHeader};
89pub use view::EnsembleView;
90pub use view_i16::QuantizedEnsembleView;
91
92// Convenience re-exports -- training core types
93pub use loss::{Loss, LossType};
94#[cfg(feature = "alloc")]
95pub use sample::Sample;
96pub use sample::{Observation, SampleRef};
97
98// Convenience re-exports -- drift detection
99pub use drift::DriftSignal;
100#[cfg(feature = "alloc")]
101pub use drift::{DriftDetector, DriftDetectorState};
102
103// Convenience re-exports -- config/error (requires alloc)
104#[cfg(feature = "alloc")]
105pub use error::{ConfigError, IrithyllError, Result};