optirs/
lib.rs

1//! # OptiRS - Advanced ML Optimization Built on SciRS2
2//!
3//! **Version:** 0.1.0-beta.3
4//! **Release Date:** 2025-10-20
5//!
6//! [![Crates.io](https://img.shields.io/crates/v/optirs.svg)](https://crates.io/crates/optirs)
7//! [![Documentation](https://docs.rs/optirs/badge.svg)](https://docs.rs/optirs)
8//! [![License](https://img.shields.io/crates/l/optirs.svg)](https://github.com/cool-japan/optirs)
9//!
10//! OptiRS is a comprehensive optimization library for machine learning, built exclusively on
11//! the [SciRS2](https://github.com/cool-japan/scirs) scientific computing ecosystem. It provides
12//! state-of-the-art optimization algorithms with advanced hardware acceleration.
13//!
14//! ## Dependencies
15//!
16//! - `scirs2-core` 0.1.0-rc.2 - Required foundation
17//!
18//! ## Sub-Crate Status (Beta.3)
19//!
20//! - ✅ `optirs-core` - Production Ready (16 optimizers, SIMD, parallel, metrics)
21//! - ✅ `optirs-bench` - Available (benchmarking and profiling)
22//! - 🚧 `optirs-gpu` - Framework Ready (GPU kernels in development)
23//! - 🔬 `optirs-learned` - Research Phase (early implementation)
24//! - 🔬 `optirs-nas` - Research Phase (early development)
25//! - 📝 `optirs-tpu` - Coming Soon (planning stage)
26//!
27//! ## Quick Start
28//!
29//! Add OptiRS to your `Cargo.toml`:
30//!
31//! ```toml
32//! [dependencies]
33//! optirs-core = "0.1.0-beta.3"
34//! ```
35//!
36//! Basic usage:
37//!
38//! ```rust
39//! use optirs::prelude::*;
40//! use scirs2_core::ndarray::Array1;
41//!
42//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
43//! // Create Adam optimizer
44//! let mut optimizer = Adam::new(0.001);
45//!
46//! // Prepare parameters and gradients
47//! let params = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0]);
48//! let gradients = Array1::from_vec(vec![0.1, 0.2, 0.15, 0.08]);
49//!
50//! // Perform optimization step
51//! let updated_params = optimizer.step(&params, &gradients)?;
52//! # Ok(())
53//! # }
54//! ```
55//!
56//! ## Features
57//!
58//! ### Core Optimizers (`optirs-core`)
59//!
60//! 16 state-of-the-art optimizers with performance optimizations:
61//!
62//! - **First-Order**: SGD, Adam, AdamW, RMSprop, Adagrad, LAMB, LARS, Lion, RAdam, SAM
63//! - **SIMD-Accelerated**: SimdSGD (2-4x faster for large arrays)
64//! - **Sparse**: SparseAdam, GroupedAdam
65//! - **Wrapper**: Lookahead
66//! - **Second-Order**: L-BFGS, Newton
67//!
68//! #### Performance Features
69//!
70//! - **SIMD Acceleration** - 2-4x speedup for large parameter arrays
71//! - **Parallel Processing** - 4-8x speedup for multiple parameter groups
72//! - **Memory-Efficient** - Gradient accumulation and chunked processing
73//! - **GPU Framework** - 10-50x potential speedup with GPU acceleration
74//! - **Production Metrics** - Real-time monitoring with minimal overhead
75//!
76//! ### GPU Acceleration (`optirs-gpu`) [Coming Soon]
77//!
78//! ```toml
79//! [dependencies]
80//! optirs-gpu = { version = "0.1.0-beta.3", features = ["cuda"] }
81//! ```
82//!
83//! - **Multi-Backend**: CUDA, Metal, OpenCL, WebGPU
84//! - **Tensor Cores**: Mixed-precision training support
85//! - **Memory Management**: Advanced GPU memory pools
86//! - **Multi-GPU**: Distributed optimization across GPUs
87//!
88//! ### TPU Coordination (`optirs-tpu`) [Coming Soon]
89//!
90//! ```toml
91//! [dependencies]
92//! optirs-tpu = "0.1.0-beta.3"
93//! ```
94//!
95//! - **Pod Management**: TPU pod coordination
96//! - **XLA Integration**: Compiler optimizations
97//! - **Fault Tolerance**: Robust hardware failure handling
98//! - **Large-Scale**: Distributed training for massive models
99//!
100//! ### Learned Optimizers (`optirs-learned`) [Research Phase]
101//!
102//! - **Transformer-based**: Self-attention optimization
103//! - **LSTM**: Recurrent optimizer networks
104//! - **Meta-Learning**: Learning to optimize across tasks
105//! - **Few-Shot**: Rapid adaptation to new problems
106//!
107//! ### Neural Architecture Search (`optirs-nas`) [Research Phase]
108//!
109//! - **Search Strategies**: Bayesian, evolutionary, RL-based
110//! - **Multi-Objective**: Balance accuracy, efficiency, resources
111//! - **Progressive**: Gradually increasing complexity
112//! - **Hardware-Aware**: Optimization for specific targets
113//!
114//! ## Module Organization
115//!
116//! OptiRS is organized into feature-gated modules:
117//!
118//! - [`core`] - Core optimizers and utilities (always available)
119//! - [`gpu`] - GPU acceleration (feature: `gpu`)
120//! - [`tpu`] - TPU coordination (feature: `tpu`)
121//! - [`learned`] - Learned optimizers (feature: `learned`)
122//! - [`nas`] - Neural architecture search (feature: `nas`)
123//! - [`bench`] - Benchmarking tools (feature: `bench`)
124//!
125//! ## Examples
126//!
127//! ### SIMD Acceleration
128//!
129//! ```rust
130//! use optirs::prelude::*;
131//! use scirs2_core::ndarray::Array1;
132//!
133//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
134//! // Large parameter array (SIMD shines with 10k+ elements)
135//! let params = Array1::from_elem(100_000, 1.0f32);
136//! let grads = Array1::from_elem(100_000, 0.001f32);
137//!
138//! let mut optimizer = SimdSGD::new(0.01f32);
139//! let updated = optimizer.step(&params, &grads)?;
140//! # Ok(())
141//! # }
142//! ```
143//!
144//! ### Parallel Processing
145//!
146//! ```rust
147//! use optirs::prelude::*;
148//! use optirs::core::parallel_optimizer::parallel_step_array1;
149//! use scirs2_core::ndarray::Array1;
150//!
151//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
152//! let params_list = vec![
153//!     Array1::from_elem(10_000, 1.0),
154//!     Array1::from_elem(20_000, 1.0),
155//! ];
156//! let grads_list = vec![
157//!     Array1::from_elem(10_000, 0.01),
158//!     Array1::from_elem(20_000, 0.01),
159//! ];
160//!
161//! let mut optimizer = Adam::new(0.001);
162//! let results = parallel_step_array1(&mut optimizer, &params_list, &grads_list)?;
163//! # Ok(())
164//! # }
165//! ```
166//!
167//! ### Production Monitoring
168//!
169//! ```rust
170//! use optirs::core::optimizer_metrics::{MetricsCollector, MetricsReporter};
171//! use optirs::prelude::*;
172//! use scirs2_core::ndarray::Array1;
173//! use std::time::Instant;
174//!
175//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
176//! let mut collector = MetricsCollector::new();
177//! collector.register_optimizer("adam");
178//!
179//! let mut optimizer = Adam::new(0.001);
180//! let params = Array1::from_elem(1000, 1.0);
181//! let grads = Array1::from_elem(1000, 0.01);
182//!
183//! let params_before = params.clone();
184//! let start = Instant::now();
185//! let params = optimizer.step(&params, &grads)?;
186//! let duration = start.elapsed();
187//!
188//! collector.update(
189//!     "adam",
190//!     duration,
191//!     0.001,
192//!     &grads.view(),
193//!     &params_before.view(),
194//!     &params.view(),
195//! )?;
196//!
197//! println!("{}", collector.summary_report());
198//! # Ok(())
199//! # }
200//! ```
201//!
202//! ## SciRS2 Integration
203//!
204//! OptiRS is built **exclusively** on SciRS2:
205//!
206//! - ✅ **Arrays**: `scirs2_core::ndarray` (NOT direct ndarray)
207//! - ✅ **Random**: `scirs2_core::random` (NOT direct rand)
208//! - ✅ **SIMD**: `scirs2_core::simd_ops`
209//! - ✅ **Parallel**: `scirs2_core::parallel_ops`
210//! - ✅ **GPU**: `scirs2_core::gpu`
211//! - ✅ **Metrics**: `scirs2_core::metrics`
212//!
213//! This ensures type safety, performance, and consistency across the ecosystem.
214//!
215//! ## Performance
216//!
217//! - **549 unit tests** + **54 doc tests** = **603 total tests**
218//! - **Zero clippy warnings** - Production quality
219//! - **Comprehensive benchmarks** - Using Criterion.rs
220//! - **Statistical analysis** - For reliable performance metrics
221//!
222//! ## Documentation
223//!
224//! - **API Documentation**: [docs.rs/optirs](https://docs.rs/optirs)
225//! - **User Guide**: See `USAGE_GUIDE.md` (8000+ words)
226//! - **Examples**: See `examples/` directory
227//! - **README**: Comprehensive feature overview
228//!
229//! ## Contributing
230//!
231//! Contributions are welcome! Ensure:
232//!
233//! - **100% SciRS2 usage** - No direct external dependencies
234//! - **All tests pass** - Run `cargo test`
235//! - **Zero warnings** - Run `cargo clippy`
236//! - **Documentation** - Add examples to public APIs
237//!
238//! ## License
239//!
240//! Dual-licensed under MIT OR Apache-2.0
241
242pub use optirs_core as core;
243
244#[cfg(feature = "gpu")]
245pub use optirs_gpu as gpu;
246
247#[cfg(feature = "tpu")]
248pub use optirs_tpu as tpu;
249
250#[cfg(feature = "learned")]
251pub use optirs_learned as learned;
252
253#[cfg(feature = "nas")]
254pub use optirs_nas as nas;
255
256#[cfg(feature = "bench")]
257pub use optirs_bench as bench;
258
259/// Common imports for ease of use
260#[allow(ambiguous_glob_reexports)]
261pub mod prelude {
262    pub use crate::core::optimizers::*;
263    pub use crate::core::regularizers::*;
264    pub use crate::core::schedulers::*;
265
266    #[cfg(feature = "gpu")]
267    pub use crate::gpu::*;
268
269    #[cfg(feature = "learned")]
270    pub use crate::learned::*;
271
272    #[cfg(feature = "nas")]
273    pub use crate::nas::*;
274}
275
276// Re-export core functionality at the top level
277pub use crate::core::error::{OptimError, Result};
278pub use crate::core::optimizers;
279pub use crate::core::regularizers;
280pub use crate::core::schedulers;