docs: def start_task(self, task_type_str, current_task_index=None):
          """Call when processing is about to start on a single task of the given task
          type, typically at the top inside of the loop that processes the tasks.
  
          Args:
              task_type_str (str):
                  The name of the task, used as a dict key and printed in the progress
                  updates.
  
              current_task_index (int):
                  If the task processing loop may skip or repeat tasks, the index of the
                  current task must be provided here. This parameter can normally be left
                  unset.
  
          """
          assert (
              task_type_str in self._task_dict
          ), "Task type has not been started yet: {}".format(task_type_str)
          if current_task_index is not None:
              self._task_dict[task_type_str]["task_idx"] = current_task_index
          else:
              self._task_dict[task_type_str]["task_idx"] += 1
          self._log_progress_if_interval_elapsed()