def __generate_holidays(cls, year):
        
        empty = Calendar()
        
        # New Year's Day (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.january, 1))
        
        # Martin Luther King's birthday (third Monday in January)
        yield Calendar.add_nth_day_of_week(date(year, JulianMonth.january, 1), 3, DayOfWeek.monday, False)
        
        # Washington's birthday (third Monday in February)
        yield Calendar.add_nth_day_of_week(date(year, JulianMonth.february, 1), 3, DayOfWeek.monday, False)
        
        # Memorial Day (last Monday in May)
        yield Calendar.add_nth_day_of_week(Calendar.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False)
        
        # Independence Day (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.july, 4))

        # Labor Day (first Monday in September)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False)

        # Columbus Day (second Monday in October)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.october, 1), 2, DayOfWeek.monday, False)

        # Veteran's Day (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.november, 11))

        # Thanksgiving Day (fourth Thursday in November)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False)

        # Christmas (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.december, 25))
    def __generate_holidays(cls, year):
        
        empty = Calendar();
        
        # New Years Days, adjusted to the first non-weekend.
        yield empty.adjust(date(year, JulianMonth.january, 1), BusinessDayConvention.following)

        # Good Friday and Easter Monday
        easter_monday = empty.easter(year)
        yield easter_monday - timedelta(3)
        yield easter_monday

        if year == 2011:
            # Royal Wedding
            yield date(2011, JulianMonth.april, 29)
            
        # May Day - first Monday in May.
        yield empty.add_nth_day_of_week(date(year, JulianMonth.may, 1), 1, DayOfWeek.monday, False)
        
        if year == 2002:
            # Golden Jubilee Bank Holiday
            yield date(2002, JulianMonth.june, 3)
            # Special Spring Bank Holiday
            yield date(2002, JulianMonth.june, 4)
        elif year == 2012:
            # Diamond Jubilee Bank Holiday
            yield date(2012, JulianMonth.june, 4)
            # Special Spring Bank Holiday
            yield date(2012, JulianMonth.june, 5)
        else:
            # Spring Bank Holiday - last Monday in May
            yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False)
        
        # August Bank Holiday - last Monday in August.
        yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.august), -1, DayOfWeek.monday, False)

        # Christmas Day
        christmas_day = empty.adjust(date(year, JulianMonth.december, 25), BusinessDayConvention.following)
        yield christmas_day

        # Boxing Day
        yield empty.add_business_days(christmas_day, 1)
        
        if year == 1999:
            # Millennium Celebration
            yield date(1999, JulianMonth.december, 31)
    def __generate_holidays(cls, year):
        
        empty = Calendar()
        
        # New Year's Day (possibly moved to Monday if on Sunday)
        new_years_day = date(year, JulianMonth.january, 1)
        yield (new_years_day if new_years_day.weekday() != DayOfWeek.sunday else new_years_day + timedelta(1))
        
        # Memorial Day (last Monday in May)
        yield Calendar.add_nth_day_of_week(Calendar.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False)
        
        # Independence Day (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.july, 4))

        # Labor Day (first Monday in September)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False)

        # Thanksgiving Day (fourth Thursday in November)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False)

        # Christmas (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.december, 25))
    def __generatte_holidays(cls, year):
        
        empty = Calendar()
        
        # New Year's Day (possibly moved to Monday if on Sunday)
        new_years_day = date(year, JulianMonth.january, 1)
        yield (new_years_day if new_years_day.weekday() != DayOfWeek.sunday else new_years_day + timedelta(1))
        
        # Washington's birthday (third Monday in February)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.february, 1), 3, DayOfWeek.monday, False)
        
        # Good Friday
        yield empty.easter(year) - timedelta(3)

        # Memorial Day (last Monday in May)
        yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False)

        # Independence Day (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.july, 4))

        # Labor Day (first Monday in September)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False)

        # Thanksgiving Day (fourth Thursday in November)
        yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False)

        # Christmas (Monday if Sunday or Friday if Saturday)
        yield empty.nearest_business_day(date(year, JulianMonth.december, 25))

        if year >= 1998:
            # Martin Luther King's birthday (third Monday in January)
            yield Calendar.add_nth_day_of_week(date(year, JulianMonth.january, 1), 3, DayOfWeek.monday, False)

        if year <= 1968 or (year <= 1980 and year % 4 == 0):
            # Presidential election days
            yield Calendar.add_nth_day_of_week(date(year, JulianMonth.november, 1), 1, DayOfWeek.tuesday, True)

        # Special closings
        if year == 2012:
            # Hurricane Sandy
            yield date(2012, JulianMonth.october, 29)
            yield date(2012, JulianMonth.october, 30)

        if year == 2007:
            # President Ford's funeral
            yield date(2007, JulianMonth.january, 2)
        
        if year == 2004:
            # President Reagan's funeral
            yield date(2004, JulianMonth.june, 11)
        
        if year == 2001:
            # September 11-14, 2001
            yield date(2001, JulianMonth.september, 11)
            yield date(2001, JulianMonth.september, 12)
            yield date(2001, JulianMonth.september, 13)
            yield date(2001, JulianMonth.september, 14)
            
        if year == 1994:
            # President Nixon's funeral
            yield date(1994, JulianMonth.april, 27)
            
        if year == 1985:
            # Hurricane Gloria
            yield date(1985, JulianMonth.september, 27)
            
        if year == 1977:
            # 1977 Blackout
            yield date(1977, JulianMonth.july, 14)
            
        if year == 1973:
            # Funeral of former President Lyndon B. Johnson.
            yield date(1973, JulianMonth.january, 25)
            
        if year == 1972:
            # Funeral of former President Harry S. Truman
            yield date(1972, JulianMonth.december, 28)
            
        if year == 1969:
            # National Day of Participation for the lunar exploration.
            yield date(1969, JulianMonth.july, 21)
            # Funeral of former President Eisenhower.
            yield date(1969, JulianMonth.march, 31)
            # Closed all day - heavy snow.
            yield date(1969, JulianMonth.february, 10)
            
        if year == 1968:
            # Day after Independence Day.
            yield date(1968, JulianMonth.july, 5)
            # June 12-Dec. 31, 1968
            # Four day week (closed on Wednesdays) - Paperwork Crisis
            d = date(1968, JulianMonth.june, 12)
            while d.year == 1968:
                yield d
                d += timedelta(7)
            # Day of mourning for Martin Luther King Jr.
            yield date(1968, JulianMonth.april, 9)
        
        if year == 1963:
            # Funeral of President Kennedy
            yield date(1963, JulianMonth.november, 25)
        
        if year == 1961:
            # Day before Decoration Day
            yield date(1961, JulianMonth.may, 29)
            
        if year == 1958:
            # Day after Christmas
            yield date(1958, JulianMonth.december, 26)
            
        if year == 1954 or year == 1956 or year == 1965:
            # Christmas Eve
            yield date(year, JulianMonth.december, 24)