@classmethod
def tenor(cls, today, expiration):
    """tenor computes the tenor of an SPX option following the
        CBOE's VIX methodology (see white paper).

        Args:
            today (datetime): A datetime object containing the quote datetime
                   of the option. Must have year, month, day, hour, minute and
                   second.
            expiration (date): A date object containing the expiration
                   date of the option. Must have year, month and day only.

        Returns:
            tenor (float): Tenor of the option in years.
        """
    assert expiration.isoweekday() != 7, 'Option expires on Sunday'
    if expiration.isoweekday() == 6:
        expiration = expiration.replace(day=expiration.day - 1)
    minutes_current_day = (today.replace(hour=23, minute=59) - today
        ).seconds // 60 + 1
    minutes_other = ((expiration - today.date()).days - 1) * (24 * 60)
    if cls.isStandard(expiration):
        minutes_settlement = 9.5 * 60
    else:
        minutes_settlement = (9.5 + 2.5 + 4) * 60
    minutes_to_expiration = (minutes_current_day + minutes_other +
        minutes_settlement)
    return minutes_to_expiration / cls.MINUTES_IN_YEAR
