neuro_divergent_core/lib.rs
1//! # Neuro-Divergent Core
2//!
3//! High-performance neural forecasting library for Rust, built on the ruv-FANN foundation.
4//! This crate provides the core abstractions, traits, and data structures needed for
5//! advanced time series forecasting with neural networks.
6//!
7//! ## Features
8//!
9//! - **Type-safe Neural Networks**: Built on ruv-FANN with generic floating-point support
10//! - **Time Series Data Structures**: Efficient handling of temporal data with exogenous variables
11//! - **Memory-safe Operations**: Rust's ownership model ensures memory safety without garbage collection
12//! - **Parallel Processing**: Built-in support for multi-threaded training and inference
13//! - **Comprehensive Error Handling**: Detailed error types for robust error management
14//! - **Flexible Configuration**: Builder patterns and configuration systems for easy setup
15//!
16//! ## Architecture
17//!
18//! The library is organized into several key modules:
19//!
20//! - [`traits`]: Core traits that define the forecasting model interface
21//! - [`data`]: Time series data structures and preprocessing utilities
22//! - [`error`]: Comprehensive error handling types
23//! - [`integration`]: Integration layer with ruv-FANN neural networks
24//! - [`config`]: Configuration management and builder patterns
25//!
26//! ## Quick Start
27//!
28//! ```rust
29//! use neuro_divergent_core::prelude::*;
30//! use chrono::{DateTime, Utc};
31//!
32//! // Create a time series dataset
33//! let mut dataset = TimeSeriesDatasetBuilder::new()
34//! .with_target_column("value")
35//! .with_time_column("timestamp")
36//! .with_unique_id_column("series_id")
37//! .build()?;
38//!
39//! // Configure a forecasting model
40//! let config = ModelConfigBuilder::new()
41//! .with_horizon(12)
42//! .with_input_size(24)
43//! .build()?;
44//!
45//! # Ok::<(), Box<dyn std::error::Error>>(())
46//! ```
47//!
48//! ## Integration with ruv-FANN
49//!
50//! This library extends ruv-FANN's neural network capabilities with time series-specific
51//! functionality:
52//!
53//! ```rust
54//! use neuro_divergent_core::integration::NetworkAdapter;
55//! use ruv_fann::Network;
56//!
57//! // Create a ruv-FANN network
58//! let network = Network::new(&[24, 64, 32, 12])?;
59//!
60//! // Wrap it with our adapter for time series forecasting
61//! let adapter = NetworkAdapter::from_network(network)
62//! .with_input_preprocessor(/* ... */)
63//! .with_output_postprocessor(/* ... */);
64//!
65//! # Ok::<(), Box<dyn std::error::Error>>(())
66//! ```
67
68#![deny(missing_docs)]
69#![deny(unsafe_code)]
70#![warn(clippy::all, clippy::pedantic, clippy::nursery)]
71#![allow(clippy::module_name_repetitions)]
72
73// Re-export essential types from dependencies
74pub use chrono::{DateTime, Utc};
75pub use ndarray::{Array1, Array2, ArrayView1, ArrayView2};
76pub use num_traits::Float;
77pub use polars::prelude::*;
78pub use serde::{Deserialize, Serialize};
79
80// Core module declarations
81pub mod config;
82pub mod data;
83pub mod error;
84pub mod integration;
85pub mod traits;
86
87// Re-export ruv-FANN types for convenience
88pub use ruv_fann::{
89 ActivationFunction, Network, NetworkBuilder, TrainingAlgorithm, TrainingData,
90};
91
92// Public API re-exports
93pub use crate::{
94 config::*,
95 data::*,
96 error::*,
97 integration::*,
98 traits::*,
99};
100
101/// Commonly used types and traits for convenient importing
102pub mod prelude {
103 pub use crate::{
104 config::ModelConfigBuilder,
105 traits::ModelConfig,
106 data::{TimeSeriesDataFrame, TimeSeriesDataset, TimeSeriesDatasetBuilder, TimeSeriesSchema},
107 error::{NeuroDivergentError, NeuroDivergentResult},
108 integration::{NetworkAdapter, TrainingBridge},
109 traits::{BaseModel, ForecastingEngine, ModelState},
110 };
111
112 // Essential external types
113 pub use chrono::{DateTime, Utc};
114 pub use num_traits::Float;
115 pub use polars::prelude::*;
116 pub use serde::{Deserialize, Serialize};
117}
118
119/// Library version information
120pub const VERSION: &str = env!("CARGO_PKG_VERSION");
121
122/// Library name
123pub const NAME: &str = env!("CARGO_PKG_NAME");
124
125/// Library description
126pub const DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
127
128#[cfg(test)]
129mod tests {
130 use super::*;
131
132 #[test]
133 fn test_version_info() {
134 assert!(!VERSION.is_empty());
135 assert!(!NAME.is_empty());
136 assert!(!DESCRIPTION.is_empty());
137 }
138
139 #[test]
140 fn test_prelude_imports() {
141 // Ensure all prelude imports are accessible
142 use crate::prelude::*;
143
144 // Test that we can reference the main types
145 let _: Option<TimeSeriesSchema> = None;
146 let _: Option<NeuroDivergentError> = None;
147 let _: Option<ModelConfigBuilder<f64>> = None;
148 }
149}