use crate::utilities::indexing_and_bijection::{compose_f_after_g, sort_perm_by_key};
pub fn simplex_perm_o2n_from_vertex_perm_o2n(
simplex_sequence: & Vec< Vec< usize > >,
vertex_perm_old_to_new: & Vec< usize >
)
->
Vec< usize >
{
sort_perm_by_key( simplex_sequence,
| x |
{
let mut new = compose_f_after_g( vertex_perm_old_to_new, x );
new.sort();
new
}
)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::topology::simplicial::simplices::unweighted::Simplex;
use crate::topology::simplicial::simplices::vector::dimension_0_through_d_simplices_in_dimensionwise_lexicographic_order_list;
use crate::utilities::indexing_and_bijection::{inverse_perm};
use crate::utilities::sequences_and_ordinals::SortedVec;
use std::iter::FromIterator;
#[test]
fn test_simplex_perm_o2n_from_vertex_perm_o2n() {
let complex_facets = vec![ vec![0,1,2], vec![0, 3] ];
let complex_facets = complex_facets.into_iter().map(|x| SortedVec::new(x).unwrap() ).collect();
let simplex_sequence_old = dimension_0_through_d_simplices_in_dimensionwise_lexicographic_order_list( &complex_facets, 1);
let perm_v_o2n = vec![0, 1, 3, 2];
let mut simplex_sequence_new = Vec::from_iter(
simplex_sequence_old
.iter()
.cloned()
.map(
|x|
Simplex{
vertices: compose_f_after_g( &perm_v_o2n, &x )
}
)
);
for simplex in simplex_sequence_new.iter_mut() { simplex.vertices.sort() }
let perm_s_o2n = simplex_perm_o2n_from_vertex_perm_o2n( &simplex_sequence_old, &perm_v_o2n );
let perm_s_n2o = inverse_perm( &perm_s_o2n );
let simplex_sequence_permuted = compose_f_after_g( &simplex_sequence_old, &perm_s_n2o );
let mut simplex_sequence_permuted_vertex_translated = simplex_sequence_permuted.clone();
for i in 0..simplex_sequence_permuted_vertex_translated.len() { simplex_sequence_permuted_vertex_translated[i] = compose_f_after_g( & perm_v_o2n, & simplex_sequence_permuted[i]) };
for i in 0..simplex_sequence_permuted_vertex_translated.len() { simplex_sequence_permuted_vertex_translated[i].sort() };
println!("sequence_old: {:?}", & simplex_sequence_old );
println!("sequence_old_permuted: {:?}", & simplex_sequence_permuted );
println!("new_sequence: {:?}", & simplex_sequence_permuted_vertex_translated );
println!("permutation: simplex old -> new {:?}", & perm_s_o2n);
}
}