1#![warn(missing_docs)]
55#![warn(clippy::all)]
56
57pub mod centrality;
58pub mod community;
59pub mod cycles;
60pub mod gnn;
61pub mod messages;
62pub mod metrics;
63pub mod motif;
64pub mod paths;
65pub mod ring_messages;
66pub mod similarity;
67pub mod topology;
68
69pub mod types;
71
72pub mod prelude {
74 pub use crate::centrality::*;
75 pub use crate::community::*;
76 pub use crate::cycles::*;
77 pub use crate::gnn::*;
78 pub use crate::messages::*;
79 pub use crate::metrics::*;
80 pub use crate::motif::*;
81 pub use crate::paths::*;
82 pub use crate::ring_messages::*;
83 pub use crate::similarity::*;
84 pub use crate::topology::*;
85 pub use crate::types::*;
86}
87
88pub fn register_all(
93 registry: &rustkernel_core::registry::KernelRegistry,
94) -> rustkernel_core::error::Result<()> {
95 tracing::info!("Registering graph analytics kernels");
96
97 registry.register_ring_metadata_from(centrality::PageRank::new)?;
99 registry.register_ring_metadata_from(centrality::DegreeCentrality::new)?;
100 registry.register_batch_typed(centrality::BetweennessCentrality::new)?;
101 registry.register_batch_typed(centrality::ClosenessCentrality::new)?;
102 registry.register_batch_typed(centrality::EigenvectorCentrality::new)?;
103 registry.register_batch_typed(centrality::KatzCentrality::new)?;
104
105 registry.register_batch_metadata_from(community::ModularityScore::new)?;
107 registry.register_batch_metadata_from(community::LouvainCommunity::new)?;
108 registry.register_batch_metadata_from(community::LabelPropagation::new)?;
109
110 registry.register_batch_metadata_from(similarity::JaccardSimilarity::new)?;
112 registry.register_batch_metadata_from(similarity::CosineSimilarity::new)?;
113 registry.register_batch_metadata_from(similarity::AdamicAdarIndex::new)?;
114 registry.register_batch_metadata_from(similarity::CommonNeighbors::new)?;
115 registry.register_batch_metadata_from(similarity::ValueSimilarity::new)?;
116
117 registry.register_batch_metadata_from(metrics::GraphDensity::new)?;
119 registry.register_batch_metadata_from(metrics::AveragePathLength::new)?;
120 registry.register_batch_metadata_from(metrics::ClusteringCoefficient::new)?;
121 registry.register_batch_metadata_from(metrics::ConnectedComponents::new)?;
122 registry.register_batch_metadata_from(metrics::FullGraphMetrics::new)?;
123
124 registry.register_ring_metadata_from(motif::TriangleCounting::new)?;
126 registry.register_batch_metadata_from(motif::MotifDetection::new)?;
127 registry.register_batch_metadata_from(motif::KCliqueDetection::new)?;
128
129 registry.register_ring_metadata_from(topology::DegreeRatio::new)?;
131 registry.register_batch_metadata_from(topology::StarTopologyScore::new)?;
132
133 registry.register_batch_metadata_from(cycles::ShortCycleParticipation::new)?;
135
136 registry.register_batch_metadata_from(paths::ShortestPath::new)?;
138
139 registry.register_batch_metadata_from(gnn::GNNInference::new)?;
141 registry.register_batch_metadata_from(gnn::GraphAttention::new)?;
142
143 tracing::info!("Registered 28 graph analytics kernels");
144 Ok(())
145}
146
147#[cfg(test)]
148mod tests {
149 use super::*;
150 use rustkernel_core::registry::KernelRegistry;
151
152 #[test]
153 fn test_register_all() {
154 let registry = KernelRegistry::new();
155 register_all(®istry).expect("Failed to register graph kernels");
156 assert_eq!(registry.total_count(), 28);
157 }
158
159 #[test]
160 fn test_register_all_by_domain() {
161 use rustkernel_core::domain::Domain;
162
163 let registry = KernelRegistry::new();
164 register_all(®istry).expect("Failed to register graph kernels");
165
166 let graph_kernels = registry.by_domain(Domain::GraphAnalytics);
167 assert_eq!(graph_kernels.len(), 28);
168 }
169}