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(
90 registry: &rustkernel_core::registry::KernelRegistry,
91) -> rustkernel_core::error::Result<()> {
92 use rustkernel_core::traits::GpuKernel;
93
94 tracing::info!("Registering graph analytics kernels");
95
96 registry.register_metadata(centrality::PageRank::new().metadata().clone())?;
98 registry.register_metadata(centrality::DegreeCentrality::new().metadata().clone())?;
99 registry.register_metadata(centrality::BetweennessCentrality::new().metadata().clone())?;
100 registry.register_metadata(centrality::ClosenessCentrality::new().metadata().clone())?;
101 registry.register_metadata(centrality::EigenvectorCentrality::new().metadata().clone())?;
102 registry.register_metadata(centrality::KatzCentrality::new().metadata().clone())?;
103
104 registry.register_metadata(community::ModularityScore::new().metadata().clone())?;
106 registry.register_metadata(community::LouvainCommunity::new().metadata().clone())?;
107 registry.register_metadata(community::LabelPropagation::new().metadata().clone())?;
108
109 registry.register_metadata(similarity::JaccardSimilarity::new().metadata().clone())?;
111 registry.register_metadata(similarity::CosineSimilarity::new().metadata().clone())?;
112 registry.register_metadata(similarity::AdamicAdarIndex::new().metadata().clone())?;
113 registry.register_metadata(similarity::CommonNeighbors::new().metadata().clone())?;
114 registry.register_metadata(similarity::ValueSimilarity::new().metadata().clone())?;
115
116 registry.register_metadata(metrics::GraphDensity::new().metadata().clone())?;
118 registry.register_metadata(metrics::AveragePathLength::new().metadata().clone())?;
119 registry.register_metadata(metrics::ClusteringCoefficient::new().metadata().clone())?;
120 registry.register_metadata(metrics::ConnectedComponents::new().metadata().clone())?;
121 registry.register_metadata(metrics::FullGraphMetrics::new().metadata().clone())?;
122
123 registry.register_metadata(motif::TriangleCounting::new().metadata().clone())?;
125 registry.register_metadata(motif::MotifDetection::new().metadata().clone())?;
126 registry.register_metadata(motif::KCliqueDetection::new().metadata().clone())?;
127
128 registry.register_metadata(topology::DegreeRatio::new().metadata().clone())?;
130 registry.register_metadata(topology::StarTopologyScore::new().metadata().clone())?;
131
132 registry.register_metadata(cycles::ShortCycleParticipation::new().metadata().clone())?;
134
135 registry.register_metadata(paths::ShortestPath::new().metadata().clone())?;
137
138 registry.register_metadata(gnn::GNNInference::new().metadata().clone())?;
140 registry.register_metadata(gnn::GraphAttention::new().metadata().clone())?;
141
142 tracing::info!("Registered 28 graph analytics kernels");
143 Ok(())
144}
145
146#[cfg(test)]
147mod tests {
148 use super::*;
149 use rustkernel_core::registry::KernelRegistry;
150
151 #[test]
152 fn test_register_all() {
153 let registry = KernelRegistry::new();
154 register_all(®istry).expect("Failed to register graph kernels");
155 assert_eq!(registry.total_count(), 28);
156 }
157
158 #[test]
159 fn test_register_all_by_domain() {
160 use rustkernel_core::domain::Domain;
161
162 let registry = KernelRegistry::new();
163 register_all(®istry).expect("Failed to register graph kernels");
164
165 let graph_kernels = registry.by_domain(Domain::GraphAnalytics);
166 assert_eq!(graph_kernels.len(), 28);
167 }
168}