def vibe_check(feature_ranks, table_sdf, safe_range=[-9007199254740991, 
    9007199254740991]):
    """Returns an error if the input data can't be safely used in Qurro as is.

       Our definition of "safe" here is that none of these DataFrames contain
       any numeric values that are outside the specified safe numeric range. By
       default, this range is [-(2**53 - 1), (2**53 - 1)].

       Primarily, this is useful for validating the BIOM table and feature
       rankings. I imagine the presence of things like numeric IDs in the
       metadata will make this hard to properly screen for without introducing
       a ton of false positives, which will annoy people; maybe we can make the
       simplifying assumption that if your data is in a categorical metadata
       column then you don't care about its numeric representation?

       Parameters
       ----------

       feature_ranks: pd.DataFrame
            A DataFrame defining feature rankings, where the index corresponds
            to feature IDs and the columns correspond to ranking names.
            Critically, every entry in this should be numeric.

       table_sdf: pd.DataFrame (or pd.SparseDataFrame)
            DataFrame representation of a feature table. Similarly to the
            feature rankings, every entry in this should be numeric.

       safe_range: collection with exactly two entries
            The first entry in the safe_range specifies the minimum value we
            allow, and the second entry specifies the maximum value we allow.
            Any numbers outside of this range are deemed to "fail the vibe
            check," in internet meme parlance circa autumn 2019.

       Returns
       -------

       None

       Raises
       ------

       ValueError: if safe_range does not contain exactly two entries, or
                   if the second entry in safe_range is less than or equal to
                   the first entry in safe_range

       OverflowError: if the feature rankings or BIOM table inputs contain any
                      numbers outside of the specified safe range
    """
    if len(safe_range) != 2:
        raise ValueError('safe_range must have a length of 2.')
    if safe_range[1] <= safe_range[0]:
        raise ValueError('safe_range[1] must be GREATER THAN safe_range[0].')
    upper_error = (
        'The input THING contains entries larger than the "safe" upper limit for numbers of {}. This means that the Qurro visualization interface is not usable, at least not currently. We suggest using Qurro\'s "Qarcoal" command to compute log-ratios outside of the Qurro visualization interface.'
        .format(safe_range[1]))
    lower_error = (
        'The input THING contains entries lower than the "safe" lower limit for numbers of {}. This means that the Qurro visualization interface is not usable, at least not currently. We suggest using Qurro\'s "Qarcoal" command to compute log-ratios outside of the Qurro visualization interface.'
        .format(safe_range[0]))
    for df, df_name in ((table_sdf, 'feature table'), (feature_ranks,
        'feature rankings data')):
        if (df > safe_range[1]).any().any():
            raise OverflowError(upper_error.replace('THING', df_name))
        if (df < safe_range[0]).any().any():
            raise OverflowError(lower_error.replace('THING', df_name))
