def test_tensor_caching(self):
        cal = dates.HolidayCalendar(
            weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
            holidays=test_data.holidays)
        conv = dates.BusinessDayConvention.FOLLOWING

        @tf.function
        def foo():
            # Trigger caching of all tables.
            date_tensor = dates.from_tuples([])
            return (cal.is_business_day(date_tensor),
                    cal.roll_to_business_day(date_tensor, conv).ordinal(),
                    cal.business_days_between(date_tensor, date_tensor),
                    cal.add_business_days(date_tensor, 2, conv).ordinal())

        @tf.function
        def bar():
            date_tensor = dates.from_tuples([(2020, 1, 3), (2020, 1, 4),
                                             (2021, 12, 24), (2021, 12, 25)])
            return (cal.is_business_day(date_tensor),
                    cal.roll_to_business_day(date_tensor, conv).ordinal(),
                    cal.business_days_between(date_tensor, date_tensor),
                    cal.add_business_days(date_tensor, 2, conv).ordinal())

        foo()
        self.assertAllEqual([True, False, False, False], bar()[0])
Exemple #2
0
 def test_periodic_schedule(self,
                            start_dates,
                            end_dates,
                            period_quantities,
                            period_type,
                            backward,
                            expected_schedule,
                            end_of_month=False):
     start_dates = dates.from_np_datetimes(_to_np_datetimes(start_dates))
     end_dates = dates.from_np_datetimes(_to_np_datetimes(end_dates))
     tenors = dates.periods.PeriodTensor(period_quantities, period_type)
     expected_schedule = dates.from_np_datetimes(
         _to_np_datetimes(expected_schedule))
     actual_schedule = dates.PeriodicSchedule(
         start_date=start_dates,
         end_date=end_dates,
         tenor=tenors,
         holiday_calendar=dates.HolidayCalendar(
             weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
             start_year=2020,
             end_year=2028),
         roll_convention=dates.BusinessDayConvention.MODIFIED_FOLLOWING,
         backward=backward,
         end_of_month=end_of_month).dates()
     self.assertAllEqual(expected_schedule.ordinal(),
                         actual_schedule.ordinal())
Exemple #3
0
 def test_no_holidays_specified(self):
     cal = dates.HolidayCalendar(start_year=2020, end_year=2021)
     date_tensor = dates.DateTensor.from_tuples([(2020, 1, 3), (2020, 1, 4),
                                                 (2021, 12, 24),
                                                 (2021, 12, 25)])
     self.assertAllEqual([True, False, True, False],
                         cal.is_business_day(date_tensor))
Exemple #4
0
 def test_is_business_day(self):
     data = test_data.is_business_day_data
     date_tensor = dates.DateTensor.from_tuples([item[0] for item in data])
     expected = [item[1] for item in data]
     cal = dates.HolidayCalendar(holidays=test_data.holidays)
     actual = cal.is_business_day(date_tensor)
     self.assertEqual(tf.bool, actual.dtype)
     self.assertAllEqual(expected, actual)
Exemple #5
0
 def test_providing_holidays(self, holidays):
     cal = dates.HolidayCalendar(holidays=holidays)
     date_tensor = dates.DateTensor.from_tuples([(2020, 1, 1), (2020, 5, 1),
                                                 (2020, 12, 25),
                                                 (2021, 3, 8),
                                                 (2021, 1, 1)])
     self.assertAllEqual([False, True, False, True, False],
                         cal.is_business_day(date_tensor))
 def test_providing_holidays(self, holidays):
     cal = dates.HolidayCalendar(
         weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY, holidays=holidays)
     date_tensor = dates.from_tuples([(2020, 1, 1), (2020, 5, 1),
                                      (2020, 12, 25), (2021, 3, 8),
                                      (2021, 1, 1)])
     self.assertAllEqual([False, True, False, True, False],
                         cal.is_business_day(date_tensor))
Exemple #7
0
 def test_holidays_intersect_with_weekends(self):
     holidays = [(2020, 1, 4)]  # Saturday.
     cal = dates.HolidayCalendar(holidays=holidays)
     date_tensor = dates.DateTensor.from_tuples([(2020, 1, 3), (2020, 1, 4),
                                                 (2020, 1, 5),
                                                 (2020, 1, 6)])
     self.assertAllEqual([True, False, False, True],
                         cal.is_business_day(date_tensor))
 def test_no_holidays_specified(self):
     cal = dates.HolidayCalendar(
         weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
         start_year=2020,
         end_year=2021)
     date_tensor = dates.from_tuples([(2020, 1, 3), (2020, 1, 4),
                                      (2021, 12, 24), (2021, 12, 25)])
     self.assertAllEqual([True, False, True, False],
                         cal.is_business_day(date_tensor))
 def test_is_business_day(self):
     data = test_data.is_business_day_data
     date_tensor = dates.from_tuples([item[0] for item in data])
     expected = [item[1] for item in data]
     cal = dates.HolidayCalendar(
         weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
         holidays=test_data.holidays)
     actual = cal.is_business_day(date_tensor)
     self.assertEqual(tf.bool, actual.dtype)
     self.assertAllEqual(expected, actual)
Exemple #10
0
 def test_skip_eager_reset(self):
     cal = dates.HolidayCalendar(start_year=2020, end_year=2021)
     cal.is_business_day(dates.DateTensor.from_tuples(
         []))  # Trigger caching.
     tf.compat.v1.reset_default_graph()
     cal.reset()
     date_tensor = dates.DateTensor.from_tuples([(2020, 1, 3), (2020, 1, 4),
                                                 (2021, 12, 24),
                                                 (2021, 12, 25)])
     self.assertAllEqual([True, False, True, False],
                         cal.is_business_day(date_tensor))
 def test_business_days_between(self):
     data = test_data.days_between_data
     date_tensor1 = dates.from_tuples([item["date1"] for item in data])
     date_tensor2 = dates.from_tuples([item["date2"] for item in data])
     expected_days_between = [item["days"] for item in data]
     cal = dates.HolidayCalendar(
         weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
         holidays=test_data.holidays)
     actual_days_between = cal.business_days_between(
         date_tensor1, date_tensor2)
     self.assertAllEqual(expected_days_between, actual_days_between)
Exemple #12
0
 def test_business_days_between(self):
     data = test_data.days_between_data
     date_tensor1 = dates.DateTensor.from_tuples(
         [item["date1"] for item in data])
     date_tensor2 = dates.DateTensor.from_tuples(
         [item["date2"] for item in data])
     expected_days_between = [item["days"] for item in data]
     cal = dates.HolidayCalendar(holidays=test_data.holidays)
     actual_days_between = cal.business_days_between(
         date_tensor1, date_tensor2)
     self.assertAllEqual(expected_days_between, actual_days_between)
Exemple #13
0
    def test_roll_to_business_days(self, rolling_enum_value, data_key):
        data = test_data.adjusted_dates_data
        date_tensor = dates.DateTensor.from_tuples(
            [item["date"] for item in data])
        expected_dates = dates.DateTensor.from_tuples(
            [item[data_key] for item in data])

        cal = dates.HolidayCalendar(holidays=test_data.holidays)
        actual_dates = cal.roll_to_business_day(
            date_tensor, roll_convention=rolling_enum_value)
        self.assertAllEqual(expected_dates.ordinals(), actual_dates.ordinals())
Exemple #14
0
 def test_add_months_and_roll(self, rolling_enum_value, data_key):
     data = test_data.add_months_data
     date_tensor = dates.DateTensor.from_tuples(
         [item["date"] for item in data])
     periods = dates.PeriodTensor([item["months"] for item in data],
                                  dates.PeriodType.MONTH)
     expected_dates = dates.DateTensor.from_tuples(
         [item[data_key] for item in data])
     cal = dates.HolidayCalendar(holidays=test_data.holidays)
     actual_dates = cal.add_period_and_roll(
         date_tensor, periods, roll_convention=rolling_enum_value)
     self.assertAllEqual(expected_dates.ordinals(), actual_dates.ordinals())
Exemple #15
0
 def test_custom_weekend_mask(self):
     weekend_mask = [0, 0, 0, 0, 1, 0,
                     1]  # Work Saturdays instead of Fridays.
     cal = dates.HolidayCalendar(start_year=2020,
                                 end_year=2021,
                                 weekend_mask=weekend_mask)
     date_tensor = dates.DateTensor.from_tuples([(2020, 1, 2), (2020, 1, 3),
                                                 (2020, 1, 4), (2020, 1, 5),
                                                 (2020, 1, 6), (2020, 5, 1),
                                                 (2020, 5, 2)])
     self.assertAllEqual([True, False, True, False, True, False, True],
                         cal.is_business_day(date_tensor))
Exemple #16
0
 def test_add_business_days_raises_on_invalid_input(self):
     data = test_data.add_days_data  # Contains some holidays.
     date_tensor = dates.DateTensor.from_tuples(
         [item["date"] for item in data])
     days = tf.constant([item["days"] for item in data])
     cal = dates.HolidayCalendar(holidays=test_data.holidays)
     with self.assertRaises(tf.errors.InvalidArgumentError):
         new_dates = cal.add_business_days(
             date_tensor,
             days,
             roll_convention=dates.BusinessDayConvention.NONE)
         self.evaluate(new_dates.ordinals())
Exemple #17
0
 def test_add_business_days(self):
     data = test_data.add_days_data
     date_tensor = dates.DateTensor.from_tuples(
         [item["date"] for item in data])
     days = tf.constant([item["days"] for item in data])
     expected_dates = dates.DateTensor.from_tuples(
         [item["shifted_date"] for item in data])
     cal = dates.HolidayCalendar(holidays=test_data.holidays)
     actual_dates = cal.add_business_days(
         date_tensor,
         days,
         roll_convention=dates.BusinessDayConvention.MODIFIED_FOLLOWING)
     self.assertAllEqual(expected_dates.ordinals(), actual_dates.ordinals())
 def test_business_day_schedule(self, start_dates, end_dates, holidays,
                                backward, expected_schedule):
   start_dates = dates.from_np_datetimes(_to_np_datetimes(start_dates))
   end_dates = dates.from_np_datetimes(_to_np_datetimes(end_dates))
   holiday_calendar = dates.HolidayCalendar(
       weekend_mask=dates.WeekendMask.SATURDAY_SUNDAY,
       holidays=holidays,
       start_year=2020,
       end_year=2020)
   backward = backward
   expected_schedule = dates.from_np_datetimes(
       _to_np_datetimes(expected_schedule))
   actual_schedule = dates.BusinessDaySchedule(
       start_date=start_dates,
       end_date=end_dates,
       holiday_calendar=holiday_calendar,
       backward=backward).dates()
   self.assertAllEqual(expected_schedule.ordinal(), actual_schedule.ordinal())
 def test_schedule_on_fixed_interval(self, start_dates, end_dates,
                                     period_quantities, period_type,
                                     backward, expected_schedule):
     start_dates = dates.DateTensor.from_np_datetimes(
         _to_np_datetimes(start_dates))
     end_dates = dates.DateTensor.from_np_datetimes(
         _to_np_datetimes(end_dates))
     tenors = dates.PeriodTensor(period_quantities, period_type)
     backward = backward
     expected_schedule = dates.DateTensor.from_np_datetimes(
         _to_np_datetimes(expected_schedule))
     actual_schedule = dates.make_schedule_on_fixed_range(
         start_dates,
         end_dates,
         tenors,
         dates.HolidayCalendar(start_year=2020, end_year=2028),
         roll_convention=dates.BusinessDayConvention.MODIFIED_FOLLOWING,
         backward=backward)
     self.assertAllEqual(expected_schedule.ordinals(),
                         actual_schedule.ordinals())