optirs_core/plugin/
mod.rs

1// Plugin architecture for custom optimizer development
2//
3// This module provides a comprehensive plugin system that allows developers to create,
4// register, and use custom optimizers seamlessly with the existing optimizer ecosystem.
5//
6// # Plugin Architecture
7//
8// The plugin system consists of several key components:
9// - Plugin trait definitions for optimizers and extensions
10// - Plugin registry for discovery and management
11// - Plugin loader for dynamic loading (when supported)
12// - Plugin SDK with utilities and helpers
13// - Plugin validation and testing framework
14//
15// # Examples
16//
17// ## Creating a Custom Optimizer Plugin
18//
19// ```no_run
20// use optirs_core::plugin::{OptimizerPlugin, PluginCapabilities};
21// use optirs_core::plugin::core::{PluginInfo, OptimizerConfig, OptimizerState};
22// use optirs_core::error::{OptimError, Result};
23// use scirs2_core::ndarray::Array1;
24//
25// #[derive(Debug, Clone)]
26// struct MyCustomOptimizer {
27//     learning_rate: f64,
28// }
29//
30// impl OptimizerPlugin<f64> for MyCustomOptimizer {
31//     fn step(&mut self, params: &Array1<f64>, gradients: &Array1<f64>) -> Result<Array1<f64>> {
32//         // Custom optimization logic
33//         Ok(params - &(gradients * self.learning_rate))
34//     }
35//
36//     fn name(&self) -> &str { "MyCustomOptimizer" }
37//     fn version(&self) -> &str { "1.0.0" }
38//
39//     fn plugin_info(&self) -> PluginInfo {
40//         PluginInfo {
41//             name: self.name().to_string(),
42//             version: self.version().to_string(),
43//             description: "A simple custom optimizer".to_string(),
44//             author: "Example Author".to_string(),
45//             ..PluginInfo::default()
46//         }
47//     }
48//
49//     fn capabilities(&self) -> PluginCapabilities {
50//         PluginCapabilities::default()
51//     }
52//
53//     fn initialize(&mut self, paramshapes: &[usize]) -> Result<()> { Ok(()) }
54//     fn reset(&mut self) -> Result<()> { Ok(()) }
55//     fn get_config(&self) -> OptimizerConfig { OptimizerConfig::default() }
56//     fn set_config(&mut self,
57//         config: OptimizerConfig) -> Result<()> { Ok(()) }
58//     fn get_state(&self) -> Result<OptimizerState> { Ok(OptimizerState::default()) }
59//     fn set_state(&mut self,
60//         state: OptimizerState) -> Result<()> { Ok(()) }
61//     fn clone_plugin(&self) -> Box<dyn OptimizerPlugin<f64>> {
62//         Box::new(self.clone())
63//     }
64// }
65// ```
66
67pub mod core;
68pub mod loader;
69pub mod registry;
70pub mod sdk;
71pub mod validation;
72// Examples are in the examples/ directory
73
74pub use core::{OptimizerPlugin, PluginCapabilities, PluginMetadata as CorePluginMetadata};
75pub use loader::{
76    LoaderConfig, PluginLoadResult, PluginLoader, PluginMetadata as LoaderPluginMetadata,
77    ValidationRule as LoaderValidationRule,
78};
79pub use registry::{PluginRegistry, RegistryConfig};
80pub use sdk::{PluginSDK, ValidationRule as SDKValidationRule};
81pub use validation::{PluginValidationFramework, ValidationConfig};