def printEvolutionInfo(evolution):
    """Function that prints all important parameters of the evolution.
    :param evolution: evolution object
    """
    print('> Simulation parameters')
    print(f'HDF file storage: {evolution.trajectoryFileName}')
    print(f'Trajectory Name: {evolution.trajectoryName}')
    if hasattr(evolution, '_t_end_initial_population'):
        print(
            f'Duration of evaluating initial population {evolution._t_end_initial_population - evolution._t_start_initial_population}'
            )
    if hasattr(evolution, '_t_end_evolution'):
        print(
            f'Duration of evolution {evolution._t_end_evolution - evolution._t_start_evolution}'
            )
    if evolution.model is not None:
        print(f'Model: {type(evolution.model)}')
        if hasattr(evolution.model, 'name'):
            if isinstance(evolution.model.name, str):
                print(f'Model name: {evolution.model.name}')
    print(f'Eval function: {evolution.evalFunction}')
    print(f'Parameter space: {evolution.paramInterval}')
    print('> Evolution parameters')
    print(f'Number of generations: {evolution.NGEN}')
    print(f'Initial population size: {evolution.POP_INIT_SIZE}')
    print(f'Population size: {evolution.POP_SIZE}')
    print(f'Crossover paramter: {evolution.CXP}')
    print(f'Selection paramter: {evolution.RANKP}')
    if len(evolution.comments) > 0:
        if isinstance(evolution.comments, str):
            print(f'Comments: {evolution.comments}')
        elif isinstance(evolution.comments, list):
            for c in evolution.comments:
                print(f'Comments: {c}')
