Skip to main content

neuralos_snn/
lib.rs

1#![cfg_attr(not(feature = "std"), no_std)]
2#![warn(missing_debug_implementations)]
3#![warn(clippy::all, clippy::pedantic)]
4#![allow(clippy::missing_errors_doc)]
5#![doc = include_str!("../README.md")]
6
7pub mod bridge;
8#[cfg(feature = "std")]
9pub mod csr;
10pub mod kernel;
11pub mod lif_neuron;
12#[cfg(feature = "std")]
13pub mod network;
14pub mod nir;
15#[cfg(feature = "simd")]
16pub mod simd;
17#[cfg(feature = "std")]
18pub mod stats;
19pub mod synapse;
20pub mod trit;
21
22pub use bridge::{
23    decode_i2_s, decode_q1_0, decode_q2_0, encode_i2_s, encode_q2_0, half_to_f32_bits,
24    half_to_milli, repack_i2s_to_kernel, wire_gamma_to_substrate, BridgeError,
25};
26pub use kernel::{
27    absmax_normalize_q15, pack_trits, ternary_matvec, unpack_trit, Q15_MAX, TRITS_PER_BYTE,
28};
29pub use lif_neuron::{
30    LIFNeuron, NeuronType, VoltageResolution, MAX_SPIKE_HISTORY, MEMBRANE_MV_MAX, MEMBRANE_MV_MIN,
31};
32#[cfg(feature = "std")]
33pub use network::{
34    NetworkStats, NetworkTopology, SparseSynapseMatrix, Spike, SpikingNeuralNetwork,
35};
36pub use nir::{
37    nir_export, nir_import, nir_scan, quantize_lif, quantize_linear, NirBuffers, NirError,
38    NirImportOptions, NirLif, NirLifParams, NirLifPopulation, NirLinear, NirNode, NirNodeKind,
39    NirNote, NirReport, NirScan, EXPORT_VERSION, NIR_NOTE_KINDS, NIR_REF_SHA,
40};
41pub use synapse::{STDPRule, Synapse, SynapseType, SCALE};
42pub use trit::{project_to_ternary, stochastic_ternary_flip, tensor_scale, ternarize, Trit};
43
44/// Crate-level error type.
45///
46/// Fallible public functions return `Result<T>` via this type; infallible
47/// accessors return plain values. No `unwrap()` / `expect()` outside tests
48/// (v0.1 lesson).
49#[derive(Debug, Clone, Copy, PartialEq, Eq)]
50pub enum Error {
51    /// Invalid parameter (e.g. zero time constant, zero neuron count).
52    InvalidParameter,
53    /// Index out of bounds (e.g. neuron id ≥ network size).
54    IndexOutOfBounds,
55    /// Missing spike-history entry (e.g. no presynaptic spike recorded inside
56    /// the STDP window).
57    SpikeHistoryMissing,
58}
59
60impl core::fmt::Display for Error {
61    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
62        match self {
63            Self::InvalidParameter => write!(f, "invalid parameter"),
64            Self::IndexOutOfBounds => write!(f, "index out of bounds"),
65            Self::SpikeHistoryMissing => write!(f, "spike history entry missing"),
66        }
67    }
68}
69
70#[cfg(feature = "std")]
71impl std::error::Error for Error {}
72
73/// Crate-wide `Result` alias.
74pub type Result<T> = core::result::Result<T, Error>;