pub fn simulate<'p, M: MathsCore, H: Habitat<M>, G: RngCore<M>, S: LocallyCoherentLineageStore<M, H>, D: DispersalSampler<M, H, G>, C: CoalescenceSampler<M, H, S>, T: TurnoverRate<M, H>, N: SpeciationProbability<M, H>, E: EventSampler<M, H, G, S, NeverEmigrationExit, D, C, T, N>, A: ActiveLineageSampler<M, H, G, S, NeverEmigrationExit, D, C, T, N, E, NeverImmigrationEntry>, P: Reporter, L: LocalPartition<'p, P>>(
    simulation: &mut Simulation<M, H, G, S, NeverEmigrationExit, D, C, T, N, E, NeverImmigrationEntry, A>,
    pause_before: Option<NonNegativeF64>,
    local_partition: &mut L
) -> (Status, NonNegativeF64, u64)