Crate rusty_perm

Source
Expand description

Rusty permutation that supports no-std and compile-time checked size.

§Cargo features

To import this crate to your project,

[dependencies]
rusty-perm = "0.2"

It has the following cargo features.

  • std (default): enable the standard library.
  • rand (default): enable random sampling of permutation.

To restrict the crate to no_std, you can disable the default features.

[dependencies]
rusty-perm = { version = "0.2", default-features = false }

§Import this crate

To import members from this crate,

use rusty_perm::{prelude::*, PermD, PermS};

Both PermD and PermS represent permutations, except that PermS has an embedded compile-time size in type signature. The static size prevents from applying permutation on arrays of wrong sizes in compile-time, and saves some runtime overheads.

§Identity

The identity permutation can be constructed with static or dynamic size.

use rusty_perm::{PermD, PermS};
let perm1 = PermS::<10>::identity();
let perm2 = PermD::identity(10);

§Build by sorting slices and arrays

It can extracts the permutation by sorting an array.

use rusty_perm::{prelude::*, PermS};

// `perm` is an operator that maps [9, 6, -1, 4] to [-1, 4, 6, 9].
let perm = PermS::from_sort(&[9, 6, -1, 4]);

// Apply same permutation on another array
let mut array = [1, 2, 3, 4];
perm.apply(&mut array);
assert_eq!(array, [3, 4, 2, 1]);

You can sort with custom comparing or key function by from_sort_by, from_sort_by_key and from_sort_by_cached_key.

use rusty_perm::{prelude::*, PermS};

// `perm` is an operator that maps [9, 6, -1, 4] to [9, 6, 4, -1].
let perm = PermS::from_sort_by_key(&[9, 6, -1, 4], |val| -val);

// Apply same permutation on another array
let mut array = [1, 2, 3, 4];
perm.apply(&mut array);
assert_eq!(array, [1, 2, 4, 3]);

§Build by indices

The permutation can be constructed by demonstrating the sorted indices.

use rusty_perm::{prelude::*, PermD};
let perm = PermD::from_indices([2, 0, 1]).unwrap();

let mut array = [-9, -5, 3];
perm.apply(&mut array);
assert_eq!(array, [3, -9, -5]);

§Inverse and composition

The example demonstrates the inverse and composition of permutations.

use rusty_perm::{prelude::*, PermD, PermS};

// Construct the permutation, its inverse and compose them
let perm = PermS::from_indices([2, 0, 1]).unwrap();
let inverse = perm.inverse();
let composition = &inverse * &perm;

// Check that composition with its inverse is identity
assert_eq!(PermD::identity(3), composition);

Modules§

  • Re-export of common traits.
  • Permutation size markers.

Structs§

  • Generic permutation data structure.

Traits§

  • The permutation operator on slice-like types.
  • An operator that builds a permutation from a list indexes.
  • An operator that builds a permutation type by sorting slice-like types.
  • The permutation composition operator.
  • An abstract representation of permutation data structure.

Type Aliases§

  • Permutation type with static size 0.
  • Permutation type with static size 1.
  • Permutation type with static size 2.
  • Permutation type with static size 4.
  • Permutation type with static size 5.
  • Permutation type with static size 6.
  • Permutation type with static size 7.
  • Permutation type with static size 8.
  • Permutation type with static size 9.
  • Permutation type with static size 10.
  • Permutation type with static size 11.
  • Permutation type with static size 12.
  • Permutation type with static size 13.
  • Permutation type with static size 14.
  • Permutation type with static size 15.
  • Permutation type with static size 16.
  • Permutation type with static size 17.
  • Permutation type with static size 18.
  • Permutation type with static size 19.
  • Permutation type with static size 20.
  • Permutation type with static size 21.
  • Permutation type with static size 22.
  • Permutation type with static size 23.
  • Permutation type with static size 24.
  • Permutation type with static size 25.
  • Permutation type with static size 26.
  • Permutation type with static size 27.
  • Permutation type with static size 28.
  • Permutation type with static size 29.
  • Permutation type with static size 30.
  • Permutation type with static size 31.
  • Permutation type with static size 32.
  • Permutation type with runtime size.
  • Permutation type with static size known in compile time.