docs: def persistent_timer(func):
      """
      Times the execution of a function. If the process is stopped and restarted then timing is continued using saved
      files.
  
      Parameters
      ----------
      func
          Some function to be timed
  
      Returns
      -------
      timed_function
          The same function with a timer attached.
      """
  
      @functools.wraps(func)
      def timed_function(optimizer_instance, *args, **kwargs):
          start_time_path = "{}/.start_time".format(optimizer_instance.phase_output_path)
          try:
              with open(start_time_path) as f:
                  start = float(f.read())
          except FileNotFoundError:
              start = time.time()
              with open(start_time_path, "w+") as f:
                  f.write(str(start))
  
          result = func(optimizer_instance, *args, **kwargs)
  
          execution_time = str(dt.timedelta(seconds=time.time() - start))
  
          logger.info("{} took {} to run".format(
              optimizer_instance.phase_name,
              execution_time
          ))
          with open("{}/execution_time".format(optimizer_instance.phase_output_path), "w+") as f:
              f.write(execution_time)
          return result
  
      return timed_function