use motif_rs::{allc, atsc, EuclideanEngine, MatrixProfileConfig};
fn main() {
let m = 20;
let n = 500;
let ts: Vec<f64> = (0..n)
.map(|i| {
let t = i as f64;
let freq = 1.0 / (80.0 - t * 40.0 / n as f64);
(t * std::f64::consts::TAU * freq).sin() + ((t * 7.1).sin() * (t * 11.3).cos()) * 0.02
})
.collect();
let engine = EuclideanEngine::new(MatrixProfileConfig::new(m));
let mp = engine.compute(&ts);
let result = allc(&mp);
println!("Time Series Chains");
println!("===================");
println!("Time series length: {n}");
println!("Subsequence length: {m}");
println!("Total chains found: {}", result.chains.len());
println!(
"Longest chain length: {} links",
result.longest.indices.len()
);
println!("\nLongest chain (evolving pattern):");
println!(" Indices: {:?}", result.longest.indices);
if result.longest.indices.len() >= 2 {
println!("\n Consecutive distances:");
for w in result.longest.indices.windows(2) {
let dist = mp.profile[w[0]];
println!(" {} → {}: distance = {:.4}", w[0], w[1], dist);
}
}
let anchor = 0;
let chain = atsc(&mp, anchor);
println!("\nChain anchored at index {anchor}:");
println!(" Length: {} links", chain.indices.len());
println!(" Indices: {:?}", chain.indices);
}