Interpret the given Python object as a table.

        Args:
            obj: A sequence (later a mapping, too)

        Returns:
            A list of lists represents rows of cells.

        Raises:
            TypeError: If the type couldn't be interpreted as a table.

def interpret_obj(
        self,
        obj,
        v_level_indexes,
        h_level_indexes,
        v_level_visibility,
        h_level_visibility,
        v_level_sort_keys,
        h_level_sort_keys,
        v_level_titles,
        h_level_titles,
    ):
        """Interpret the given Python object as a table.

        Args:
            obj: A sequence (later a mapping, too)

        Returns:
            A list of lists represents rows of cells.

        Raises:
            TypeError: If the type couldn't be interpreted as a table.
        """
        if not isinstance(obj, NonStringIterable):
            raise self.error("Cannot make a table from object {!r}".format(obj))

        rectangular_rows = tabulate(
            obj,
            v_level_indexes=v_level_indexes,
            h_level_indexes=h_level_indexes,
            v_level_visibility=v_level_visibility,
            h_level_visibility=h_level_visibility,
            v_level_sort_keys=v_level_sort_keys,
            h_level_sort_keys=h_level_sort_keys,
            v_level_titles=v_level_titles,
            h_level_titles=h_level_titles,
        )
        assert is_rectangular(rectangular_rows)
        num_rows, num_cols = size(rectangular_rows)
        return rectangular_rows, num_cols