mod algo;
mod config;
mod engine;
mod kernel;
pub mod native;
mod progress;
mod registry;
mod typed;
use crate::{dsl::StateRow, graph::GraphId};
pub use algo::RunOptions;
pub use config::{TraversalConfig, TraversalConfigBuilder, TraversalStrategy};
pub use kernel::{EdgeCtx, Kernel};
pub use native::search_native;
pub use registry::{
BoxedRun, BoxedTypedRun, KernelEntry, RunKernel, RunTypedKernel, TypedKernelEntry, boxed_run,
boxed_typed_run, build_kernel, build_typed_kernel, inventory, register_kernel,
try_build_kernel, try_build_typed_kernel,
};
pub use typed::ParquetPaths;
pub use typed::{
ArrowList, ArrowRow, ArrowStruct, OwnedGraphPath, OwnedSearchResult, PayloadField, TypedKernel,
TypedPayloadCache,
};
pub(crate) use typed::{read_parquet_tables, read_parquet_topology};
#[derive(Debug, Clone, PartialEq)]
pub struct GraphPath<'a> {
pub nodes: Vec<GraphId<'a>>,
pub edges: Vec<GraphId<'a>>,
pub state: StateRow,
pub intermediate_states: Option<Vec<StateRow>>,
}
#[derive(Debug)]
pub struct SearchResult<'a> {
pub paths: Vec<GraphPath<'a>>,
pub stats: SearchStats,
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub struct SearchStats {
pub start_nodes: usize,
pub path_entries: usize,
pub evaluated_edges: usize,
pub accepted_edges: usize,
pub rejected_edges: usize,
pub skipped_revisits: usize,
pub stopped_paths: usize,
pub max_depth: usize,
pub materialized_node_payloads: usize,
pub materialized_edge_payloads: usize,
pub lazy_payload_read_calls: usize,
pub lazy_payload_requested_rows: usize,
pub lazy_payload_selected_rows: usize,
pub lazy_payload_row_groups: usize,
}