pub mod advanced_nlp;
pub mod bioinformatics;
pub mod finance;
pub mod graph_features;
pub mod image_features;
pub mod multi_modal;
pub mod text_features;
pub mod time_series;
pub use advanced_nlp::AdvancedNLPFeatureSelector;
pub use bioinformatics::BioinformaticsFeatureSelector;
pub use finance::FinanceFeatureSelector;
pub use graph_features::GraphFeatureSelector;
pub use image_features::ImageFeatureSelector;
pub use multi_modal::MultiModalFeatureSelector;
pub use text_features::TextFeatureSelector;
pub use time_series::TimeSeriesSelector;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Domain {
TimeSeries,
Text,
Image,
Graph,
MultiModal,
Bioinformatics,
Finance,
AdvancedNLP,
}
impl Domain {
pub fn description(&self) -> &'static str {
match self {
Domain::TimeSeries => "Time series and temporal pattern analysis",
Domain::Text => "Text mining and document analysis",
Domain::Image => "Image processing and computer vision",
Domain::Graph => "Graph theory and network analysis",
Domain::MultiModal => "Multi-modal data fusion and integration",
Domain::Bioinformatics => "Bioinformatics and genomic data analysis",
Domain::Finance => "Financial modeling and trading analytics",
Domain::AdvancedNLP => "Advanced natural language processing",
}
}
pub fn use_cases(&self) -> Vec<&'static str> {
match self {
Domain::TimeSeries => vec![
"Financial time series forecasting",
"Sensor data analysis",
"Economic indicator modeling",
"Climate and weather data",
"IoT and monitoring systems",
],
Domain::Text => vec![
"Document classification",
"Sentiment analysis",
"Information retrieval",
"Content recommendation",
"Text summarization",
],
Domain::Image => vec![
"Medical image analysis",
"Object recognition",
"Quality control inspection",
"Satellite imagery processing",
"Facial recognition systems",
],
Domain::Graph => vec![
"Social network analysis",
"Biological network modeling",
"Knowledge graph construction",
"Citation analysis",
"Infrastructure network optimization",
],
Domain::MultiModal => vec![
"Multimedia content analysis",
"Sensor fusion applications",
"Cross-modal retrieval",
"Multimodal machine learning",
"Human-computer interaction",
],
Domain::Bioinformatics => vec![
"Gene expression analysis",
"Genome-wide association studies",
"Drug discovery",
"Personalized medicine",
"Protein function prediction",
],
Domain::Finance => vec![
"Algorithmic trading",
"Risk management",
"Portfolio optimization",
"Fraud detection",
"Credit scoring",
],
Domain::AdvancedNLP => vec![
"Machine translation",
"Question answering systems",
"Text generation",
"Language understanding",
"Conversational AI",
],
}
}
pub fn key_techniques(&self) -> Vec<&'static str> {
match self {
Domain::TimeSeries => vec![
"Autocorrelation analysis",
"Seasonal decomposition",
"Cross-correlation",
"Spectral analysis",
"Stationarity testing",
],
Domain::Text => vec![
"TF-IDF weighting",
"Chi-squared testing",
"Document frequency analysis",
"N-gram extraction",
"Feature hashing",
],
Domain::Image => vec![
"Spatial correlation analysis",
"Frequency domain transforms",
"Texture analysis",
"Edge detection",
"Local feature descriptors",
],
Domain::Graph => vec![
"Centrality measures",
"Community detection",
"PageRank algorithm",
"Graph clustering",
"Structural analysis",
],
Domain::MultiModal => vec![
"Early fusion strategies",
"Late fusion approaches",
"Cross-modal correlation",
"Attention mechanisms",
"Feature alignment",
],
Domain::Bioinformatics => vec![
"Multiple testing correction",
"Pathway enrichment analysis",
"Population stratification",
"Gene set analysis",
"Linkage disequilibrium",
],
Domain::Finance => vec![
"Technical indicators",
"Risk-adjusted returns",
"Regime detection",
"Market microstructure",
"Value-at-Risk modeling",
],
Domain::AdvancedNLP => vec![
"Dependency parsing",
"Semantic role labeling",
"Attention mechanisms",
"Transformer architectures",
"Discourse analysis",
],
}
}
pub fn all() -> Vec<Domain> {
vec![
Domain::TimeSeries,
Domain::Text,
Domain::Image,
Domain::Graph,
Domain::MultiModal,
Domain::Bioinformatics,
Domain::Finance,
Domain::AdvancedNLP,
]
}
}
impl std::fmt::Display for Domain {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let name = match self {
Domain::TimeSeries => "Time Series",
Domain::Text => "Text",
Domain::Image => "Image",
Domain::Graph => "Graph",
Domain::MultiModal => "Multi-Modal",
Domain::Bioinformatics => "Bioinformatics",
Domain::Finance => "Finance",
Domain::AdvancedNLP => "Advanced NLP",
};
write!(f, "{}", name)
}
}
#[allow(non_snake_case)]
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_domain_descriptions() {
for domain in Domain::all() {
assert!(!domain.description().is_empty());
assert!(!domain.use_cases().is_empty());
assert!(!domain.key_techniques().is_empty());
}
}
#[test]
fn test_domain_display() {
assert_eq!(Domain::TimeSeries.to_string(), "Time Series");
assert_eq!(Domain::Text.to_string(), "Text");
assert_eq!(Domain::Image.to_string(), "Image");
assert_eq!(Domain::Graph.to_string(), "Graph");
assert_eq!(Domain::MultiModal.to_string(), "Multi-Modal");
assert_eq!(Domain::Bioinformatics.to_string(), "Bioinformatics");
assert_eq!(Domain::Finance.to_string(), "Finance");
assert_eq!(Domain::AdvancedNLP.to_string(), "Advanced NLP");
}
#[test]
fn test_domain_enum_completeness() {
let all_domains = Domain::all();
assert_eq!(all_domains.len(), 8);
for domain in all_domains {
assert!(domain.use_cases().len() >= 3);
assert!(domain.key_techniques().len() >= 3);
}
}
}