#![warn(missing_docs)]
#![warn(clippy::all)]
pub mod centrality;
pub mod community;
pub mod cycles;
pub mod gnn;
pub mod messages;
pub mod metrics;
pub mod motif;
pub mod paths;
pub mod ring_messages;
pub mod similarity;
pub mod topology;
pub mod types;
pub mod prelude {
pub use crate::centrality::*;
pub use crate::community::*;
pub use crate::cycles::*;
pub use crate::gnn::*;
pub use crate::messages::*;
pub use crate::metrics::*;
pub use crate::motif::*;
pub use crate::paths::*;
pub use crate::ring_messages::*;
pub use crate::similarity::*;
pub use crate::topology::*;
pub use crate::types::*;
}
pub fn register_all(
registry: &rustkernel_core::registry::KernelRegistry,
) -> rustkernel_core::error::Result<()> {
tracing::info!("Registering graph analytics kernels");
registry.register_ring_metadata_from(centrality::PageRank::new)?;
registry.register_ring_metadata_from(centrality::DegreeCentrality::new)?;
registry.register_batch_typed(centrality::BetweennessCentrality::new)?;
registry.register_batch_typed(centrality::ClosenessCentrality::new)?;
registry.register_batch_typed(centrality::EigenvectorCentrality::new)?;
registry.register_batch_typed(centrality::KatzCentrality::new)?;
registry.register_batch_metadata_from(community::ModularityScore::new)?;
registry.register_batch_metadata_from(community::LouvainCommunity::new)?;
registry.register_batch_metadata_from(community::LabelPropagation::new)?;
registry.register_batch_metadata_from(similarity::JaccardSimilarity::new)?;
registry.register_batch_metadata_from(similarity::CosineSimilarity::new)?;
registry.register_batch_metadata_from(similarity::AdamicAdarIndex::new)?;
registry.register_batch_metadata_from(similarity::CommonNeighbors::new)?;
registry.register_batch_metadata_from(similarity::ValueSimilarity::new)?;
registry.register_batch_metadata_from(metrics::GraphDensity::new)?;
registry.register_batch_metadata_from(metrics::AveragePathLength::new)?;
registry.register_batch_metadata_from(metrics::ClusteringCoefficient::new)?;
registry.register_batch_metadata_from(metrics::ConnectedComponents::new)?;
registry.register_batch_metadata_from(metrics::FullGraphMetrics::new)?;
registry.register_ring_metadata_from(motif::TriangleCounting::new)?;
registry.register_batch_metadata_from(motif::MotifDetection::new)?;
registry.register_batch_metadata_from(motif::KCliqueDetection::new)?;
registry.register_ring_metadata_from(topology::DegreeRatio::new)?;
registry.register_batch_metadata_from(topology::StarTopologyScore::new)?;
registry.register_batch_metadata_from(cycles::ShortCycleParticipation::new)?;
registry.register_batch_metadata_from(paths::ShortestPath::new)?;
registry.register_batch_metadata_from(gnn::GNNInference::new)?;
registry.register_batch_metadata_from(gnn::GraphAttention::new)?;
tracing::info!("Registered 28 graph analytics kernels");
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use rustkernel_core::registry::KernelRegistry;
#[test]
fn test_register_all() {
let registry = KernelRegistry::new();
register_all(®istry).expect("Failed to register graph kernels");
assert_eq!(registry.total_count(), 28);
}
#[test]
fn test_register_all_by_domain() {
use rustkernel_core::domain::Domain;
let registry = KernelRegistry::new();
register_all(®istry).expect("Failed to register graph kernels");
let graph_kernels = registry.by_domain(Domain::GraphAnalytics);
assert_eq!(graph_kernels.len(), 28);
}
}