class_docstr: Base class for symbolic regression / classification estimators.
  
  Warning: This class should not be used directly.
  Use derived classes instead.
class_docstr_tok: ["Base","class","for","symbolic","regression","\/","classification","estimators",".","Warning",":","This","class","should","not","be","used","directly",".","Use","derived","classes","instead","."]
docstr: A report of the progress of the evolution process.
  
  Parameters
  ----------
  run_details : dict
      Information about the evolution.
docstr_tok: ["A","report","of","the","progress","of","the","evolution","process",".","Parameters","--","--","--","--","--","run_details",":","dict","Information","about","the","evolution","."]
code: def _verbose_reporter(self, run_details=None):
      """A report of the progress of the evolution process.
  
      Parameters
      ----------
      run_details : dict
          Information about the evolution.
  
      """
      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,
              )
          )
  
imports: import itertools
  from abc import ABCMeta, abstractmethod
  from time import time
  from warnings import warn
  import numpy
  from joblib import Parallel, delayed
  from scipy.stats import rankdata
  from sklearn.base import BaseEstimator
  from sklearn.base import RegressorMixin, TransformerMixin, ClassifierMixin
  from sklearn.exceptions import NotFittedError
  from sklearn.utils import compute_sample_weight
  from sklearn.utils.validation import check_array, _check_sample_weight
  from sklearn.utils.multiclass import check_classification_targets
  from ._program import _Program
  from .fitness import _fitness_map, _Fitness
  from .functions import _function_map, _Function, sig1
  from .utils import _partition_estimators
  from .utils import check_random_state
label_desc: Use image node_id 2 for calling the BaseSymbolic obj's underlying member method code with example usage: obj._verbose_reporter(run_details) without return types