code: def test_compute_date_range_chunks_invalid_input(self):
      # Start date not found in calendar
      with self.assertRaises(KeyError) as cm:
          compute_date_range_chunks(
              self.calendar.all_sessions,
              T("2017-05-07"),  # Sunday
              T("2017-06-01"),
              None,
          )
      self.assertEqual(
          str(cm.exception),
          "'Start date 2017-05-07 is not found in calendar.'",
      )
  
      # End date not found in calendar
      with self.assertRaises(KeyError) as cm:
          compute_date_range_chunks(
              self.calendar.all_sessions,
              T("2017-05-01"),
              T("2017-05-27"),  # Saturday
              None,
          )
      self.assertEqual(
          str(cm.exception),
          "'End date 2017-05-27 is not found in calendar.'",
      )
  
      # End date before start date
      with self.assertRaises(ValueError) as cm:
          compute_date_range_chunks(
              self.calendar.all_sessions,
              T("2017-06-01"),
              T("2017-05-01"),
              None,
          )
      self.assertEqual(
          str(cm.exception),
          "End date 2017-05-01 cannot precede start date 2017-06-01.",
      )
  
file_path: zipline/tests/utils/test_date_utils.py
imports: from pandas import Timestamp
  from nose_parameterized import parameterized
  from trading_calendars import get_calendar
  from zipline.testing import ZiplineTestCase
  from zipline.utils.date_utils import compute_date_range_chunks
label_desc: Use image node_id 3 for calling the TestDateUtils obj's underlying member method code with example usage: obj.test_compute_date_range_chunks_invalid_input() without return types