Files
wifi-densepose/examples/exo-ai-2025/crates/exo-core/src/traits.rs
ruv d803bfe2b1 Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
2026-02-28 14:39:40 -05:00

233 lines
6.8 KiB
Rust

//! Core traits for backend abstraction
//!
//! This module defines the primary traits that all substrate backends must implement,
//! enabling hardware-agnostic development across classical, neuromorphic, photonic,
//! and processing-in-memory architectures.
use crate::types::*;
use async_trait::async_trait;
/// Backend trait for substrate compute operations
///
/// This trait abstracts over different hardware backends (classical, neuromorphic,
/// photonic, PIM) providing a unified interface for cognitive substrate operations.
///
/// # Type Parameters
///
/// * `Error` - Backend-specific error type
///
/// # Examples
///
/// ```rust,ignore
/// use exo_core::{SubstrateBackend, Pattern};
///
/// struct MyBackend;
///
/// #[async_trait]
/// impl SubstrateBackend for MyBackend {
/// type Error = std::io::Error;
///
/// async fn similarity_search(
/// &self,
/// query: &[f32],
/// k: usize,
/// filter: Option<&Filter>,
/// ) -> Result<Vec<SearchResult>, Self::Error> {
/// // Implementation
/// Ok(vec![])
/// }
///
/// // ... other methods
/// }
/// ```
#[async_trait]
pub trait SubstrateBackend: Send + Sync {
/// Backend-specific error type
type Error: std::error::Error + Send + Sync + 'static;
/// Execute similarity search on substrate
///
/// Finds the k-nearest neighbors to the query vector in the substrate's
/// learned manifold. Optionally applies metadata filters.
///
/// # Arguments
///
/// * `query` - Query vector embedding
/// * `k` - Number of nearest neighbors to retrieve
/// * `filter` - Optional metadata filter
///
/// # Returns
///
/// Vector of search results ordered by similarity (descending)
async fn similarity_search(
&self,
query: &[f32],
k: usize,
filter: Option<&Filter>,
) -> Result<Vec<SearchResult>, Self::Error>;
/// Deform manifold to incorporate new pattern
///
/// For continuous manifold backends (neural implicit representations),
/// this performs gradient-based deformation. For discrete backends,
/// this performs an insert operation.
///
/// # Arguments
///
/// * `pattern` - Pattern to integrate into substrate
/// * `learning_rate` - Deformation strength (0.0-1.0)
///
/// # Returns
///
/// ManifoldDelta describing the change applied
async fn manifold_deform(
&self,
pattern: &Pattern,
learning_rate: f32,
) -> Result<ManifoldDelta, Self::Error>;
/// Execute hyperedge query
///
/// Performs topological queries on the substrate's hypergraph structure,
/// supporting persistent homology, Betti numbers, and sheaf consistency.
///
/// # Arguments
///
/// * `query` - Topological query specification
///
/// # Returns
///
/// HyperedgeResult containing query-specific results
async fn hyperedge_query(
&self,
query: &TopologicalQuery,
) -> Result<HyperedgeResult, Self::Error>;
}
/// Temporal context for causal operations
///
/// This trait provides temporal memory operations with causal structure,
/// enabling queries constrained by light-cone causality and anticipatory
/// pre-fetching based on predicted future queries.
///
/// # Examples
///
/// ```rust,ignore
/// use exo_core::{TemporalContext, CausalCone};
///
/// async fn temporal_query<T: TemporalContext>(ctx: &T) {
/// let now = ctx.now();
/// let cone = CausalCone::past(now);
/// let results = ctx.causal_query(&query, &cone).await?;
/// }
/// ```
#[async_trait]
pub trait TemporalContext: Send + Sync {
/// Get current substrate time
///
/// Returns a monotonically increasing timestamp representing
/// the current substrate clock.
fn now(&self) -> SubstrateTime;
/// Query with causal cone constraints
///
/// Retrieves patterns within the specified causal cone,
/// respecting temporal ordering and causal dependencies.
///
/// # Arguments
///
/// * `query` - Query specification
/// * `cone` - Causal cone constraint (past, future, or light-cone)
///
/// # Returns
///
/// Vector of results with causal and temporal distance metrics
async fn causal_query(
&self,
query: &Query,
cone: &CausalCone,
) -> Result<Vec<CausalResult>, Error>;
/// Predictive pre-fetch based on anticipated queries
///
/// Warms cache with predicted future queries based on
/// current context and usage patterns.
///
/// # Arguments
///
/// * `hints` - Anticipation hints for prediction
async fn anticipate(&self, hints: &[AnticipationHint]) -> Result<(), Error>;
}
/// Optional trait for Processing-in-Memory backends
///
/// Future backend interface for PIM hardware (UPMEM, Samsung Aquabolt-XL)
#[async_trait]
pub trait PimBackend: SubstrateBackend {
/// Execute operation directly in memory bank
async fn execute_in_memory(&self, op: &MemoryOperation) -> Result<(), Error>;
/// Query memory bank location for data
fn data_location(&self, pattern_id: PatternId) -> MemoryBank;
}
/// Optional trait for Neuromorphic backends
///
/// Future backend interface for neuromorphic hardware (Intel Loihi, IBM TrueNorth)
#[async_trait]
pub trait NeuromorphicBackend: SubstrateBackend {
/// Encode vector as spike train
fn encode_spikes(&self, vector: &[f32]) -> SpikeTrain;
/// Decode spike train to vector
fn decode_spikes(&self, spikes: &SpikeTrain) -> Vec<f32>;
/// Submit spike computation
async fn submit_spike_compute(&self, input: SpikeTrain) -> Result<SpikeTrain, Error>;
}
/// Optional trait for Photonic backends
///
/// Future backend interface for photonic computing (Lightmatter, Luminous)
#[async_trait]
pub trait PhotonicBackend: SubstrateBackend {
/// Optical matrix-vector multiply
async fn optical_matmul(&self, matrix: &OpticalMatrix, vector: &[f32]) -> Vec<f32>;
/// Configure Mach-Zehnder interferometer
async fn configure_mzi(&self, config: &MziConfig) -> Result<(), Error>;
}
// Placeholder types for future backend traits
/// Memory operation specification for PIM backends
#[derive(Clone, Debug)]
pub struct MemoryOperation {
pub operation_type: String,
pub data: Vec<u8>,
}
/// Memory bank identifier for PIM backends
#[derive(Clone, Debug, Copy, PartialEq, Eq, Hash)]
pub struct MemoryBank(pub u32);
/// Spike train for neuromorphic backends
#[derive(Clone, Debug)]
pub struct SpikeTrain {
pub timestamps: Vec<f64>,
pub neuron_ids: Vec<u32>,
}
/// Optical matrix for photonic backends
#[derive(Clone, Debug)]
pub struct OpticalMatrix {
pub dimensions: (usize, usize),
pub phase_shifts: Vec<f32>,
}
/// MZI configuration for photonic backends
#[derive(Clone, Debug)]
pub struct MziConfig {
pub phase: f32,
pub attenuation: f32,
}