use crate::genotypes::Range as RangeGenotype;
use rand::distr::uniform::SampleUniform;
use rand::Rng;
use std::fmt::Debug;
pub fn range_random_initialization<T>(
genes_per_chromosome: usize,
alleles: Option<&[RangeGenotype<T>]>,
_needs_unique_ids: Option<bool>,
) -> Vec<RangeGenotype<T>>
where
T: Sync + Send + Clone + Default + Debug + 'static + PartialOrd + SampleUniform + Copy,
{
let mut genes = Vec::new();
let mut rng = crate::rng::make_rng();
let alleles = alleles.expect("At least 1 allele must be provided for range genotype");
for i in 0..genes_per_chromosome {
let allele = alleles[rng.random_range(0..alleles.len())].clone();
let range = allele.ranges[rng.random_range(0..allele.ranges.len())];
let gene = RangeGenotype::new(i as i32, vec![range], rng.random_range(range.0..range.1));
genes.push(gene);
}
genes
}