code: def _verbose_reporter(self, run_details=None):
          
          if run_details is None:
              print('    |{:^25}|{:^42}|'.format('Population Average',
                                                 'Best Individual'))
              print('-' * 4 + ' ' + '-' * 25 + ' ' + '-' * 42 + ' ' + '-' * 10)
              line_format = '{:>4} {:>8} {:>16} {:>8} {:>16} {:>16} {:>10}'
              print(line_format.format('Gen', 'Length', 'Fitness', 'Length',
                                       'Fitness', 'OOB Fitness', 'Time Left'))
  
          else:
              # Estimate remaining time for run
              gen = run_details['generation'][-1]
              generation_time = run_details['generation_time'][-1]
              remaining_time = (self.generations - gen - 1) * generation_time
              if remaining_time > 60:
                  remaining_time = '{0:.2f}m'.format(remaining_time / 60.0)
              else:
                  remaining_time = '{0:.2f}s'.format(remaining_time)
  
              oob_fitness = 'N/A'
              line_format = '{:4d} {:8.2f} {:16g} {:8d} {:16g} {:>16} {:>10}'
              if self.max_samples < 1.0:
                  oob_fitness = run_details['best_oob_fitness'][-1]
                  line_format = '{:4d} {:8.2f} {:16g} {:8d} {:16g} {:16g} {:>10}'
  
              print(line_format.format(run_details['generation'][-1],
                                       run_details['average_length'][-1],
                                       run_details['average_fitness'][-1],
                                       run_details['best_length'][-1],
                                       run_details['best_fitness'][-1],
                                       oob_fitness,
                                       remaining_time))
docs: A report of the progress of the evolution process.
  
          Parameters
          ----------
          run_details : dict
              Information about the evolution.