<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def compute_toc_line_indentation_spaces( header_type_curr: int = 1, header_type_prev: int = 0, no_of_indentation_spaces_prev: int = 0, parser: str = 'github', ordered: bool = False, list_marker: str = '-', list_marker_log: list = build_list_marker_log('github', '.'), index: int = 1) -> int: r"""Compute the number of indentation spaces for the TOC list element. :parameter header_type_curr: the current type of header (h[1-Inf]). Defaults to ``1``. :parameter header_type_prev: the previous type of header (h[1-Inf]). Defaults to ``0``. :parameter no_of_indentation_spaces_prev: the number of previous indentation spaces. Defaults to ``0``. :parameter parser: decides rules on how compute indentations. Defaults to ``github``. :parameter ordered: if set to ``True``, numbers will be used as list ids or otherwise a dash character, otherwise. Defaults to ``False``. :parameter list_marker: a string that contains some of the first characters of the list element. Defaults to ``-``. :parameter list_marker_log: a data structure that holds list marker information for ordered lists. Defaults to ``build_list_marker_log('github', '.')``. :parameter index: a number that will be used as list id in case of an ordered table of contents. Defaults to ``1``. :type header_type_curr: int :type header_type_prev: int :type no_of_indentation_spaces_prev: int :type parser: str :type ordered: bool :type list_marker: str :type list_marker_log: list :type index: int :returns: no_of_indentation_spaces_curr, the number of indentation spaces for the list element. :rtype: int :raises: a built-in exception. .. note:: Please note that this function assumes that no_of_indentation_spaces_prev contains the correct number of spaces. """

    assert header_type_curr >= 1
    assert header_type_prev >= 0
    assert no_of_indentation_spaces_prev >= 0
    if (parser == 'github' or parser == 'cmark' or parser == 'gitlab'
            or parser == 'commonmarker' or parser == 'redcarpet'):
        if ordered:
            assert list_marker in md_parser[parser]['list']['ordered'][
                'closing_markers']
        else:
            assert list_marker in md_parser[parser]['list']['unordered'][
                'bullet_markers']
    if (parser == 'github' or parser == 'cmark' or parser == 'gitlab'
            or parser == 'commonmarker'):
        if ordered:
            assert len(
                list_marker_log) == md_parser['github']['header']['max_levels']
            for e in list_marker_log:
                assert isinstance(e, str)
    assert index >= 1

    if (parser == 'github' or parser == 'cmark' or parser == 'gitlab'
            or parser == 'commonmarker'):
        if header_type_prev == 0:
            # Base case for the first toc line.
            no_of_indentation_spaces_curr = 0
        elif header_type_curr == header_type_prev:
            # Base case for same indentation.
            no_of_indentation_spaces_curr = no_of_indentation_spaces_prev
        else:
            if ordered:
                list_marker_prev = str(list_marker_log[header_type_curr - 1])
            else:
                # list_marker for unordered lists will always be 1 character.
                list_marker_prev = list_marker

            # Generic cases.
            if header_type_curr > header_type_prev:
                # More indentation.
                no_of_indentation_spaces_curr = (
                    no_of_indentation_spaces_prev + len(list_marker_prev) +
                    len(' '))
            elif header_type_curr < header_type_prev:
                # Less indentation.
                no_of_indentation_spaces_curr = (
                    no_of_indentation_spaces_prev -
                    (len(list_marker_prev) + len(' ')))

            # Reset older nested list indices. If this is not performed then
            # future nested ordered lists will rely on incorrect data to
            # compute indentations.
            if ordered:
                for i in range((header_type_curr - 1) + 1,
                               md_parser['github']['header']['max_levels']):
                    list_marker_log[i] = str(
                        md_parser['github']['list']['ordered']
                        ['min_marker_number']) + list_marker

        # Update the data structure.
        if ordered:
            list_marker_log[header_type_curr - 1] = str(index) + list_marker

    elif parser == 'redcarpet':
        no_of_indentation_spaces_curr = 4 * (header_type_curr - 1)

    return no_of_indentation_spaces_curr