s2gpp 1.0.2

Algorithm for Highly Efficient Detection of Correlation Anomalies in Multivariate Time Series
Documentation
use crate::data_store::edge::Edge;
use crate::data_store::node::IndependentNode;
use crate::parameters::Parameters;
use crate::training::scoring::weights::ScoringWeights;
use crate::training::scoring::Scorer;
use crate::training::Training;
use crate::SyncInterface;
use ndarray::arr1;
use std::fs::remove_file;
use std::path::Path;

#[test]
fn scores_are_written_to_file() {
    let mut training = Training::init(Parameters::default());
    training.scoring.score = Some(arr1(&[1., 1., 1., 1., 1.]));

    let scores_path = "data/_test_scores.csv";
    training.output_score(scores_path.to_string()).unwrap();
    let path = Path::new(scores_path);
    assert!(path.exists());
    remove_file(path).expect("Could not delete test file!");
}

#[test]
fn node_degrees_correctly_calculated() {
    let mut training = Training::init(Parameters::default());
    let edges = vec![
        Edge::new(
            IndependentNode::new(0, 0, 0).into_ref(),
            IndependentNode::new(0, 1, 1).into_ref(),
        ),
        Edge::new(
            IndependentNode::new(0, 1, 1).into_ref(),
            IndependentNode::new(1, 1, 2).into_ref(),
        ),
        Edge::new(
            IndependentNode::new(0, 0, 2).into_ref(),
            IndependentNode::new(1, 1, 3).into_ref(),
        ),
        Edge::new(
            IndependentNode::new(0, 0, 3).into_ref(),
            IndependentNode::new(0, 1, 4).into_ref(),
        ),
    ];

    let mut expected_node_degrees = vec![((0, 0), 2), ((0, 1), 2), ((1, 1), 2)];

    training.data_store.add_edges(edges);
    let node_degrees = training.calculate_node_degrees();

    let mut real_degrees: Vec<((usize, usize), usize)> = node_degrees
        .iter()
        .map(|(node, count)| ((node.get_segment_id(), node.get_cluster()), count.clone()))
        .collect();

    real_degrees.sort();
    expected_node_degrees.sort();

    assert_eq!(real_degrees, expected_node_degrees);
}