<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def tabulate( obj, v_level_indexes=None, h_level_indexes=None, v_level_visibility=None, h_level_visibility=None, v_level_sort_keys=None, h_level_sort_keys=None, v_level_titles=None, h_level_titles=None, empty="", ):
 """Render a nested data structure into a two-dimensional table. Args: obj: The indexable data structure to be rendered, which can either be a non-string sequence or a mapping containing other sequences and mappings nested to arbitrarily many levels, with all the leaf items (which are neither sequences nor mappings, excluding strings). v_level_indexes: An iterable of the zero-based indexes of the levels for which the keys/indexes will be displayed along the vertical axis of the table. Taken together with the levels in h_levels these must represent the complete set of levels in the obj data structure. No level index should appear in both v_level_indexes and h_level_indexes, but all level indexes must appear in either v_level_indexes or h_level_indexes. If None, the levels not used in h_level_indexes will be used. If both v_level_indexes and h_level_indexes are not alternate indexes will be used as v_level and h_level indexes. h_level_indexes: An iterable of the zero-based indexes of the levels for which the keys/indexes will be displayed along the horizontal axis of the table. Taken together with the levels in v_levels these must represent the complete set of levels in the obj data structure. No level index should appear in both h_level_indexes and v_level_indexes, but all level indexes must appear in either h_level_indexes or v_level_indexes. If None, the levels not used in v_level_indexes will be used. If both v_level_indexes and h_level_indexes are not alternate indexes will be used as v_level and h_level indexes. v_level_visibility: An optional iterable of booleans, where each item corresponds to a level in v_level_indexes, and controls whether than level of index is included in the table stub columns. This iterable must contain the same number of items as v_level_indexes. h_level_visibility: An optional iterable of booleans, where each item corresponds to a level in h_level_indexes, and controls whether than level of index is included in the table header rows. This iterable must contain the same number of items as h_level_indexes. v_level_sort_keys: An optional iterable of Keys, where each key corresponds to a level in v_level_indexes, and controls how that key is sorted. If None, keys are sorted as-is. h_level_sort_keys: An optional iterable of Keys, where each key corresponds to a level in v_level_indexes, and controls how that key is sorted. If None, keys are sorted as-is. v_level_titles: An optional iterable of strings, where each string is a title which corresponds to a level in v_level_indexes, and which will be displayed against the row keys for that level. If None, no titles will be included. h_level_titles: An optional iterable of strings, where each string is a title which corresponds to a level in h_level_indexes, and which will be displayed against the column keys for that level. If None, no titles will be included. empty: An optional string value to use for empty cells. Returns: A list of lists representing the rows of cells. Example: tabulate(dict_of_dicts, [0, 1], []) """

    level_keys = breadth_first(obj)

    v_level_indexes, h_level_indexes = validate_level_indexes(
        len(level_keys), v_level_indexes, h_level_indexes
    )

    if v_level_visibility is None:
        v_level_visibility = [True] * len(v_level_indexes)
    if h_level_visibility is None:
        h_level_visibility = [True] * len(h_level_indexes)

    table, v_key_tuples, h_key_tuples = tabulate_body(
        obj, level_keys, v_level_indexes, h_level_indexes, v_level_sort_keys, h_level_sort_keys
    )

    table, v_key_tuples = strip_missing_rows(table, v_key_tuples)
    table, h_key_tuples = strip_missing_columns(table, h_key_tuples)
    v_key_tuples = strip_hidden(v_key_tuples, v_level_visibility)
    h_key_tuples = strip_hidden(h_key_tuples, h_level_visibility)
    return assemble_table(
        table, v_key_tuples, h_key_tuples, v_level_titles, h_level_titles, empty=empty
    )