pub fn random_vecs<I: Iterator>(
    seed: Seed,
    xs_gen: &dyn Fn(Seed) -> I,
    mean_length_numerator: u64,
    mean_length_denominator: u64
) -> RandomVecs<I::Item, GeometricRandomNaturalValues<u64>, I>Notable traits for RandomVecs<T, I, J>impl<T, I: Iterator<Item = u64>, J: Iterator<Item = T>> Iterator for RandomVecs<T, I, J> type Item = Vec<T>;
Expand description

Generates random Vecs using elements from an iterator.

The lengths of the Vecs are sampled from a geometric distribution with a specified mean $m$, equal to mean_length_numerator / mean_length_denominator. $m$ must be greater than 0.

$$ P((x_i)_{i=0}^{n-1}) = \frac{m^n}{(m+1)^{n+1}}\prod_{i=0}^{n-1}P(x_i). $$

xs_gen must be infinite.

Panics

Panics if mean_length_numerator or mean_length_denominator are zero, or, if after being reduced to lowest terms, their sum is greater than or equal to $2^{64}$.

Examples

extern crate itertools;

use itertools::Itertools;
use malachite_base::num::random::random_primitive_ints;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::vecs::random::random_vecs;

let xs = random_vecs(EXAMPLE_SEED, &random_primitive_ints::<u8>, 4, 1);
let values = xs.take(20).collect_vec();
assert_eq!(
    values.iter().map(Vec::as_slice).collect_vec().as_slice(),
    &[
        &[][..],
        &[85, 11, 136, 200, 235, 134, 203, 223, 38, 235, 217, 177, 162, 32],
        &[166, 234, 30, 218],
        &[90, 106, 9, 216],
        &[204],
        &[],
        &[151, 213, 97, 253, 78],
        &[91, 39],
        &[191, 175, 170, 232],
        &[],
        &[233, 2, 35, 22, 217, 198],
        &[],
        &[],
        &[114, 17, 32, 173, 114, 65, 121, 222, 173, 25, 144],
        &[148, 79, 115, 52, 73, 69, 137, 91],
        &[],
        &[153, 178, 112],
        &[],
        &[34, 95, 106, 167, 197],
        &[130, 168, 122, 207, 172, 177, 86, 150, 221]
    ]
);