unflat_list = [1, 2, [3, 4], [5, [9]]]
    Args:
        unflat_list (list):

    Returns:
        list: flat_list

    CommandLine:
        python -m utool.util_list --exec-total_flatten --show

    Example:
        >>> # DISABLE_DOCTEST
        >>> from utool.util_list import *  # NOQA
        >>> import utool as ut
        >>> unflat_list = [[[1, 2, 3], 4, 5], 9, [2, 3], [1, [2, 3, 4]], 1, 2, 3]
        >>> flat_list = total_flatten(unflat_list)
        >>> result = ('flat_list = %s' % (ut.repr2(flat_list),))
        >>> print(result)

def total_flatten(unflat_list):
    """
    unflat_list = [1, 2, [3, 4], [5, [9]]]
    Args:
        unflat_list (list):

    Returns:
        list: flat_list

    CommandLine:
        python -m utool.util_list --exec-total_flatten --show

    Example:
        >>> # DISABLE_DOCTEST
        >>> from utool.util_list import *  # NOQA
        >>> import utool as ut
        >>> unflat_list = [[[1, 2, 3], 4, 5], 9, [2, 3], [1, [2, 3, 4]], 1, 2, 3]
        >>> flat_list = total_flatten(unflat_list)
        >>> result = ('flat_list = %s' % (ut.repr2(flat_list),))
        >>> print(result)
    """
    import utool as ut
    next_list = unflat_list
    scalar_flags = [not ut.isiterable(item) for item in next_list]
    while not all(scalar_flags):
        unflatenized = [[item] if flag else item for flag, item in zip(scalar_flags, next_list)]
        flatter_list = ut.flatten(unflatenized)
        next_list = flatter_list
        scalar_flags = [not ut.isiterable(item) for item in next_list]
    flat_list = next_list
    return flat_list