use crate::network::LearnedManifold;
use exo_core::{ManifoldDelta, Pattern, Result};
use parking_lot::RwLock;
use std::sync::Arc;
pub struct ManifoldDeformer {
_network: Arc<RwLock<LearnedManifold>>,
_learning_rate: f32,
}
impl ManifoldDeformer {
pub fn new(network: Arc<RwLock<LearnedManifold>>, learning_rate: f32) -> Self {
Self {
_network: network,
_learning_rate: learning_rate,
}
}
pub fn deform(&mut self, pattern: &Pattern, salience: f32) -> Result<ManifoldDelta> {
Ok(ManifoldDelta::ContinuousDeform {
embedding: pattern.embedding.clone(),
salience,
loss: 0.0,
})
}
}
#[cfg(test)]
mod tests {
use super::*;
use exo_core::{Metadata, PatternId, SubstrateTime};
#[test]
fn test_deformer_creation() {
let network = Arc::new(RwLock::new(LearnedManifold::new(64, 128, 3)));
let _deformer = ManifoldDeformer::new(network, 0.01);
}
#[test]
fn test_deform() {
let network = Arc::new(RwLock::new(LearnedManifold::new(64, 128, 3)));
let mut deformer = ManifoldDeformer::new(network, 0.01);
let pattern = Pattern {
id: PatternId::new(),
embedding: vec![1.0; 64],
metadata: Metadata::default(),
timestamp: SubstrateTime::now(),
antecedents: vec![],
salience: 0.9,
};
let result = deformer.deform(&pattern, 0.9);
assert!(result.is_ok());
}
}