holos-tda 0.9.0

Vietoris-Rips persistence and checked degree-Rips modules
Documentation
use super::*;
use crate::SparseDistanceMatrix;

#[test]
fn product_order_keeps_incomparable_grades_incomparable() {
    let left = ProductGrade::new([1.0, 3.0]).unwrap();
    let right = ProductGrade::new([2.0, 2.0]).unwrap();
    assert!(!left.precedes(&right));
    assert!(!right.precedes(&left));
    assert_eq!(
        CoordinateProjection::new(0).project(&left).unwrap().value(),
        1.0
    );
}

#[test]
fn explicit_complex_rejects_a_late_face() {
    let complex = FilteredSimplicialComplex::new(
        vec![0, 1],
        vec![
            vec![
                FilteredSimplex::new(vec![0], ScalarGrade::new(0.0).unwrap()),
                FilteredSimplex::new(vec![1], ScalarGrade::new(2.0).unwrap()),
            ],
            vec![FilteredSimplex::new(
                vec![0, 1],
                ScalarGrade::new(1.0).unwrap(),
            )],
        ],
    );
    assert_eq!(
        complex.unwrap_err().message(),
        "face [1] appears after its coface [0, 1]"
    );
}

#[test]
fn flag_builder_uses_global_labels_and_clique_diameters() {
    let graph =
        SparseDistanceMatrix::from_triplets(3, &[(0, 1, 1.0), (0, 2, 2.0), (1, 2, 1.5)]).unwrap();
    let complex = FilteredSimplicialComplex::from_flag_graph(
        &graph,
        &[4, 8, 9],
        FlagComplexParams {
            max_dimension: 2,
            threshold: Some(2.0),
            limits: ComplexLimits {
                max_vertices: 10,
                max_edges: 10,
                max_triangles: 10,
                max_higher_simplices: 10,
            },
        },
    )
    .unwrap();
    assert_eq!(complex.simplices()[2][0].vertices(), &[4, 8, 9]);
    assert_eq!(complex.simplices()[2][0].grade().value(), 2.0);
}