pub fn simulate<'p, M: MathsCore, H: Habitat<M>, G: PrimeableRng<M>, D: DispersalSampler<M, H, G>, T: TurnoverRate<M, H>, N: SpeciationProbability<M, H>, A: SingularActiveLineageSampler<M, H, G, IndependentLineageStore<M, H>, NeverEmigrationExit, D, IndependentCoalescenceSampler<M, H>, T, N, IndependentEventSampler<M, H, G, NeverEmigrationExit, D, T, N>, NeverImmigrationEntry>, R: Reporter, P: LocalPartition<'p, R>, L: IntoIterator<Item = Lineage>>(
    simulation: &mut Simulation<M, H, G, IndependentLineageStore<M, H>, NeverEmigrationExit, D, IndependentCoalescenceSampler<M, H>, T, N, IndependentEventSampler<M, H, G, NeverEmigrationExit, D, T, N>, NeverImmigrationEntry, A>,
    lineages: L,
    dedup_cache: DedupCache,
    step_slice: NonZeroU64,
    local_partition: &mut P
) -> (Status, NonNegativeF64, u64, impl IntoIterator<Item = Lineage>)