<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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()