pub mod edges;
pub use self::edges::{VisibilityEdges, VisibilityType};
use crate::core::TimeSeries;
pub fn natural_visibility<T>(series: &TimeSeries<T>) -> Vec<(usize, usize, f64)>
where
T: Copy + PartialOrd + Into<f64>,
{
let edges = VisibilityEdges::new(series, VisibilityType::Natural, |_, _, _, _| 1.0)
.compute_edges();
edges.into_iter().map(|((src, dst), w)| (src, dst, w)).collect()
}
#[cfg(feature = "parallel")]
pub fn natural_visibility_parallel<T>(series: &TimeSeries<T>) -> Vec<(usize, usize, f64)>
where
T: Copy + PartialOrd + Into<f64> + Send + Sync,
{
let edges = VisibilityEdges::new(series, VisibilityType::Natural, |_, _, _, _| 1.0)
.compute_edges_parallel();
edges.into_iter().map(|((src, dst), w)| (src, dst, w)).collect()
}
pub fn horizontal_visibility<T>(series: &TimeSeries<T>) -> Vec<(usize, usize, f64)>
where
T: Copy + PartialOrd + Into<f64>,
{
let edges = VisibilityEdges::new(series, VisibilityType::Horizontal, |_, _, _, _| 1.0)
.compute_edges();
edges.into_iter().map(|((src, dst), w)| (src, dst, w)).collect()
}
#[cfg(feature = "parallel")]
pub fn horizontal_visibility_parallel<T>(series: &TimeSeries<T>) -> Vec<(usize, usize, f64)>
where
T: Copy + PartialOrd + Into<f64> + Send + Sync,
{
let edges = VisibilityEdges::new(series, VisibilityType::Horizontal, |_, _, _, _| 1.0)
.compute_edges_parallel();
edges.into_iter().map(|((src, dst), w)| (src, dst, w)).collect()
}
pub fn visibility_weighted<T, F>(
series: &TimeSeries<T>,
visibility_type: VisibilityType,
weight_fn: F,
) -> std::collections::HashMap<(usize, usize), f64>
where
T: Copy + PartialOrd + Into<f64>,
F: Fn(usize, usize, T, T) -> f64,
{
VisibilityEdges::new(series, visibility_type, weight_fn).compute_edges()
}