8.10.5. Logger
**************

class Logger(data_sets: Dict[str, DataSet], interface: BaseParameters, losses: Dict[str, Loss], path: str | Path | None = None, group_by: Tuple[str] | None = None, iteration_digits: int = 6, sort_stats_by: str = 'contribution', general_log_interval: int = 10, parameters_log_interval: int = 500, history_log_interval: int = 500, flush_log_interval: int = 10)

   Logger class used to save function evaluations to disk. Single
   instance is used for all logging from all optimizers.

   Logs and saves the following data produced during an Optimization
   to disk for every Data Set provided:

   * *best/**: Same as *latest/** but for the iteration with the
     lowest loss function.

   * *history/*  : Same as *latest/** but stored every *history*
     iterations.

   * *initial/**: Same as *latest/** but for the initial parameter
     settings.

   * *latest/active_parameters.txt*: iteration and list of current
     parameter values.

   * *latest/data_set_predictions.yaml*: file in DataSet yaml format
     that can be loaded with a DataSetEvaluator.

   * *latest/engine.txt*: Engine settings block for AMS.

   * *latest/evaluation.txt*: Current evaluation number.

   * *latest/loss.txt*: The loss function value.

   * *latest/parameter_interface.yaml*: Parameters in yaml format.

   * *latest/pes_predictions/*.txt*: Predictions for all entries with
     the "pes" extractor.

   * *latest/scatter_plots/*.txt*: Current predictions per extractor
     or grouped as defined by the group_by attribute.

   * *latest/stats.txt*: Current MAE and RMSE per extractor or grouped
     as defined by the group_by attribute.

   * *running_active_parameters.txt*: The values of the (active)
     parameters, stored every 'parameters' iterations.

   * *running_loss.txt*: iteration and loss function value. Plottable
     with "params plot".

   * *running_stats.txt*: mae and rmse per extractor or grouped as
     defined by the group_by attribute.

   Depending on the parameter interface, also:

   * *latest/lj_parameters.txt*: For Lennard-Jones optimizations,
     contains the LJ parameters

   * *latest/ffield.ff*: For ReaxFF optimizations, contains the
     parameters in ffield format

   * *latest/xtb_files*: For GFN1-xTB optimizations, contains the
     parameters in a format that can be read by AMS

   The files are stored in a directory called *dataset_name_results*,
   e.g. *training_set_results*.

   Note:

     It is possible to turn off the logging of a particular type by
     setting the associated "*_log_interval parameter=0"

   Parameters:
   data_sets : Dict[str, DataSet]
      Dictionary of data set names to "DataSet" instances.

   interface : BaseParameters
      Parameter interface used during the optimization. Note that a
      copy of the interface is made by the logger so that the provided
      interface and logger interface are no longer the same python
      object.

   losses : Dict[str, Loss]
      Dictionary of data set names to "Loss" instances.

   path :str OR Path, optional
      Path to root directory in which all files will be logged.
      Defaults to the current working directory.

   group_by : tuple of strings
      A tuple in the same format as accepted by
      DataSetEvaluator.group_by().

      Examples

         group_by=('Extractor', 'Expression') # default
         group_by=('Group', 'SubGroup') # requires that the dataset entries have Group and SubGroup metadata

   iteration_digits : int
      Number of digits to print the iteration number to file names and
      latest/evaluation.txt, running_loss.txt, and running_stats.txt.

      Example: iteration_digits == 6 will print the first iteration as
      000001

      Example: iteration_digits == None will print the first iteration
      as 1

   sort_stats_by : str
      Sort the *latest/stats.txt* and related files.

      'contribution': sort by contribution to loss function value

      'rmse': sort by rmse

      'mae': sort by mae

      None: do not sort (use the same order as in the original
      DataSet)

   general_log_interval : int
      Interval between writes to stdout, running_loss and
      running_stats and all *latest/* and *best/* files.

   parameters_log_interval : int
      Interval between writes to running_active_parameters.txt

   history_log_interval : int
      Interval of copies from 'latest' to 'history'

   flush_log_interval : int
      How often to flush the running_* files
