Skip to main content

tsetlin_rs/
lib.rs

1//! # Tsetlin Machine
2//!
3//! A professional Rust implementation of the Tsetlin Machine algorithm
4//! for interpretable machine learning.
5//!
6//! # Models
7//!
8//! - [`TsetlinMachine`] - Binary classification (dynamic)
9//! - [`SmallTsetlinMachine`] - Binary classification (compile-time optimized)
10//! - [`SparseTsetlinMachine`] - Memory-efficient inference (5-100x reduction)
11//! - [`MultiClass`] - Multi-class classification (one-vs-all)
12//! - [`Regressor`] - Regression
13//! - [`Convolutional`] - Image classification with patch extraction
14//!
15//! # Clause Types
16//!
17//! | Type | Heap | Best For |
18//! |------|------|----------|
19//! | [`Clause`] | Yes | Dynamic dimensions, serde |
20//! | [`SmallClause`] | No | N ≤ 64, maximum speed |
21//! | [`BitwiseClause`] | Yes | N ≥ 64, 25-92x speedup |
22//! | [`SmallBitwiseClause`] | No | 64-256 features, no heap |
23//! | [`SparseClause`] | Inline | Inference, 5-100x compression |
24//! | [`SparseClauseBank`] | Yes | CSR batch inference |
25//!
26//! # Advanced Features
27//!
28//! - **Weighted Clauses** - Clauses learn weights based on accuracy
29//! - **Adaptive Threshold** - Dynamic T adjustment during training
30//! - **Clause Pruning** - Automatic reset of dead/ineffective clauses
31//! - **Const Generics** - Zero-allocation stack types with loop unrolling
32//! - **Lock-Free Parallel Training** - Async local voting tallies (ICML 2021)
33//!
34//! # Feature Flags
35//!
36//! - `std` (default): Standard library support
37//! - `simd`: SIMD-optimized evaluation (requires nightly)
38//! - `parallel`: Parallel training via rayon
39//! - `serde`: Serialization support
40//!
41//! # Quick Start
42//!
43//! ```
44//! use tsetlin_rs::{Config, TsetlinMachine};
45//!
46//! let config = Config::builder().clauses(20).features(2).build().unwrap();
47//! let mut tm = TsetlinMachine::new(config, 10);
48//!
49//! let x = vec![vec![0, 0], vec![0, 1], vec![1, 0], vec![1, 1]];
50//! let y = vec![0, 1, 1, 0];
51//!
52//! tm.fit(&x, &y, 200, 42);
53//! assert!(tm.evaluate(&x, &y) >= 0.75);
54//! ```
55
56#![cfg_attr(not(feature = "std"), no_std)]
57#![cfg_attr(feature = "simd", feature(portable_simd))]
58
59#[cfg(not(feature = "std"))]
60extern crate alloc;
61
62mod automaton;
63mod binary;
64mod bitplane;
65mod bitwise;
66mod clause;
67mod clause_bank;
68mod config;
69mod convolutional;
70pub mod error;
71pub mod feedback;
72mod model;
73mod multiclass;
74mod regression;
75mod rule;
76mod small;
77mod sparse;
78mod training;
79pub mod utils;
80
81#[cfg(feature = "parallel")]
82pub mod parallel;
83
84#[cfg(feature = "parallel")]
85pub mod parallel_training;
86
87#[cfg(feature = "simd")]
88pub mod simd;
89
90#[cfg(feature = "gpu")]
91pub mod gpu;
92
93pub use automaton::Automaton;
94pub use binary::{AdvancedOptions, TsetlinMachine};
95pub use bitplane::BitPlaneBank;
96pub use bitwise::{BitwiseClause, pack_batch, pack_input};
97pub use clause::Clause;
98pub use clause_bank::{ClauseBank, ClauseFilter, ClauseFilterStats};
99pub use config::{Config, ConfigBuilder};
100pub use convolutional::{ConvConfig, Convolutional};
101pub use error::{Error, Result};
102pub use model::{TsetlinModel, VotingModel};
103pub use multiclass::MultiClass;
104#[cfg(feature = "parallel")]
105pub use parallel_training::{LocalTally, ParallelBatch, TrainingArena};
106pub use regression::Regressor;
107pub use rule::Rule;
108pub use small::{
109    BitwiseClause64, BitwiseClause128, BitwiseClause256, Clause2, Clause4, Clause8, Clause16,
110    Clause32, Clause64, SmallBitwiseClause, SmallClause, SmallTsetlinMachine, TM2x20, TM4x40,
111    TM8x80, TM16x160, pack_input_small
112};
113pub use sparse::{SparseClause, SparseClauseBank, SparseMemoryStats, SparseTsetlinMachine};
114pub use training::{EarlyStop, FitOptions, FitResult};