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