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}