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};