Skip to main content

rustkernel_risk/
lib.rs

1//! # RustKernel Risk Analytics
2//!
3//! GPU-accelerated risk analytics kernels for credit, market, and portfolio risk.
4//!
5//! ## Kernels
6//!
7//! ### Credit (1 kernel)
8//! - `CreditRiskScoring` - PD/LGD/EAD calculation and credit scoring
9//!
10//! ### Market (3 kernels)
11//! - `MonteCarloVaR` - Monte Carlo Value at Risk simulation
12//! - `PortfolioRiskAggregation` - Correlation-adjusted portfolio VaR
13//! - `RealTimeCorrelation` - Streaming correlation matrix updates
14//!
15//! ### Stress (1 kernel)
16//! - `StressTesting` - Scenario-based stress testing
17
18#![warn(missing_docs)]
19
20pub mod correlation;
21pub mod credit;
22pub mod market;
23pub mod messages;
24pub mod ring_messages;
25pub mod stress;
26pub mod types;
27
28/// Prelude for convenient imports.
29pub mod prelude {
30    pub use crate::correlation::*;
31    pub use crate::credit::*;
32    pub use crate::market::*;
33    pub use crate::messages::*;
34    pub use crate::ring_messages::*;
35    pub use crate::stress::*;
36    pub use crate::types::*;
37}
38
39// Re-export main kernels
40pub use correlation::RealTimeCorrelation;
41pub use credit::CreditRiskScoring;
42pub use market::{MonteCarloVaR, PortfolioRiskAggregation};
43pub use stress::StressTesting;
44
45// Re-export key types
46pub use types::{
47    CreditExposure, CreditFactors, CreditRiskResult, Portfolio, PortfolioRiskResult, RiskFactor,
48    RiskFactorType, Sensitivity, StressScenario, StressTestResult, VaRParams, VaRResult,
49};
50
51/// Register all risk kernels with a registry.
52pub fn register_all(
53    registry: &rustkernel_core::registry::KernelRegistry,
54) -> rustkernel_core::error::Result<()> {
55    tracing::info!("Registering risk analytics kernels");
56
57    // Credit kernel (1) - Ring
58    registry.register_ring_metadata_from(credit::CreditRiskScoring::new)?;
59
60    // Market kernels (3) - Ring
61    registry.register_ring_metadata_from(market::MonteCarloVaR::new)?;
62    registry.register_ring_metadata_from(market::PortfolioRiskAggregation::new)?;
63    registry.register_ring_metadata_from(correlation::RealTimeCorrelation::new)?;
64
65    // Stress kernel (1) - Batch
66    registry.register_batch_typed::<StressTesting, messages::StressTestingInput, messages::StressTestingOutput>(stress::StressTesting::new)?;
67
68    tracing::info!("Registered 5 risk analytics kernels");
69    Ok(())
70}
71
72#[cfg(test)]
73mod tests {
74    use super::*;
75    use rustkernel_core::registry::KernelRegistry;
76
77    #[test]
78    fn test_register_all() {
79        let registry = KernelRegistry::new();
80        register_all(&registry).expect("Failed to register risk kernels");
81        assert_eq!(registry.total_count(), 5);
82    }
83}