code: def make_futures_info(cls):
      day = cls.trading_calendar.day
      two_days = 2 * day
      end_buffer_days = ROLL_DAYS_FOR_CURRENT_CONTRACT * day
  
      cls.first_end_date = pd.Timestamp("2017-01-20", tz="UTC")
      cls.second_end_date = pd.Timestamp("2017-02-17", tz="UTC")
      cls.third_end_date = pd.Timestamp("2017-03-17", tz="UTC")
      cls.third_auto_close_date = cls.third_end_date - two_days
      cls.fourth_start_date = cls.third_auto_close_date - two_days
      cls.fourth_end_date = pd.Timestamp("2017-04-17", tz="UTC")
      cls.fourth_auto_close_date = cls.fourth_end_date + two_days
      cls.fifth_start_date = pd.Timestamp("2017-03-15", tz="UTC")
      cls.fifth_end_date = cls.END_DATE
      cls.fifth_auto_close_date = cls.fifth_end_date - two_days
      cls.last_start_date = cls.fourth_end_date
  
      return pd.DataFrame.from_dict(
          {
              1000: {
                  "symbol": "CLF17",
                  "root_symbol": "CL",
                  "start_date": cls.START_DATE,
                  "end_date": cls.first_end_date,
                  "auto_close_date": cls.first_end_date - two_days,
                  "exchange": "CMES",
              },
              1001: {
                  "symbol": "CLG17",
                  "root_symbol": "CL",
                  "start_date": cls.START_DATE,
                  "end_date": cls.second_end_date,
                  "auto_close_date": cls.second_end_date - two_days,
                  "exchange": "CMES",
              },
              1002: {
                  "symbol": "CLH17",
                  "root_symbol": "CL",
                  "start_date": cls.START_DATE,
                  "end_date": cls.third_end_date,
                  "auto_close_date": cls.third_auto_close_date,
                  "exchange": "CMES",
              },
              1003: {
                  "symbol": "CLJ17",
                  "root_symbol": "CL",
                  "start_date": cls.fourth_start_date,
                  "end_date": cls.fourth_end_date,
                  "auto_close_date": cls.fourth_auto_close_date,
                  "exchange": "CMES",
              },
              1004: {
                  "symbol": "CLK17",
                  "root_symbol": "CL",
                  "start_date": cls.fifth_start_date,
                  "end_date": cls.fifth_end_date,
                  "auto_close_date": cls.fifth_auto_close_date,
                  "exchange": "CMES",
              },
              1005: {
                  "symbol": "CLM17",
                  "root_symbol": "CL",
                  "start_date": cls.last_start_date,
                  "end_date": cls.END_DATE,
                  "auto_close_date": cls.END_DATE + two_days,
                  "exchange": "CMES",
              },
              1006: {
                  "symbol": "CLN17",
                  "root_symbol": "CL",
                  "start_date": cls.last_start_date,
                  "end_date": cls.END_DATE,
                  "auto_close_date": cls.END_DATE + two_days,
                  "exchange": "CMES",
              },
              2000: {
                  # Using a placeholder month of 'A' to mean this is the
                  # first contract in the chain.
                  "symbol": "FVA17",
                  "root_symbol": "FV",
                  "start_date": cls.START_DATE,
                  "end_date": cls.END_DATE + end_buffer_days,
                  "auto_close_date": cls.END_DATE + two_days,
                  "exchange": "CMES",
              },
              2001: {
                  # Using a placeholder month of 'B' to mean this is the
                  # second contract in the chain.
                  "symbol": "FVB17",
                  "root_symbol": "FV",
                  "start_date": cls.START_DATE,
                  "end_date": cls.END_DATE + end_buffer_days,
                  "auto_close_date": cls.END_DATE + end_buffer_days,
                  "exchange": "CMES",
              },
          },
          orient="index",
      )
  
imports: from collections import deque
  from functools import partial
  from textwrap import dedent
  from numpy import arange, array, int64, full, repeat, tile
  from numpy.testing import assert_almost_equal
  import pandas
  from pandas import Timestamp, DataFrame
  from zipline.assets.continuous_futures import OrderedContracts, delivery_predicate
  from zipline.assets.roll_finder import ROLL_DAYS_FOR_CURRENT_CONTRACT, VolumeRollFinder
  from zipline.data.minute_bars import FUTURES_MINUTES_PER_DAY
  from zipline.errors import SymbolNotFound
  import zipline.testing.fixtures
label_desc: Use image node_id 2 for calling the RollFinderTestCase obj's underlying member method code with example usage: obj.make_futures_info(cls) and returns: pd