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#[derive(Debug, Clone, Copy, PartialEq, Eq)]
50pub enum Error {
51 InvalidParameter,
53 IndexOutOfBounds,
55 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
73pub type Result<T> = core::result::Result<T, Error>;