code: def make_rotating_equity_info(
      num_assets,
      first_start,
      frequency,
      periods_between_starts,
      asset_lifetime,
      exchange="TEST",
  ):
      """
      Create a DataFrame representing lifetimes of assets that are constantly
      rotating in and out of existence.
  
      Parameters
      ----------
      num_assets : int
          How many assets to create.
      first_start : pd.Timestamp
          The start date for the first asset.
      frequency : str or pd.tseries.offsets.Offset (e.g. trading_day)
          Frequency used to interpret next two arguments.
      periods_between_starts : int
          Create a new asset every `frequency` * `periods_between_new`
      asset_lifetime : int
          Each asset exists for `frequency` * `asset_lifetime` days.
      exchange : str, optional
          The exchange name.
  
      Returns
      -------
      info : pd.DataFrame
          DataFrame representing newly-created assets.
      """
      return pd.DataFrame(
          {
              "symbol": [chr(ord("A") + i) for i in range(num_assets)],
              # Start a new asset every `periods_between_starts` days.
              "start_date": pd.date_range(
                  first_start,
                  freq=(periods_between_starts * frequency),
                  periods=num_assets,
              ),
              # Each asset lasts for `asset_lifetime` days.
              "end_date": pd.date_range(
                  first_start + (asset_lifetime * frequency),
                  freq=(periods_between_starts * frequency),
                  periods=num_assets,
              ),
              "exchange": exchange,
          },
          index=range(num_assets),
      )
  
file_path: zipline/zipline/assets/synthetic.py
imports: from itertools import product
  from string import ascii_uppercase
  import pandas
  from pandas.tseries.offsets import MonthBegin
  from .futures import CMES_CODE_TO_MONTH
label_desc: Use image node_id 1 for calling a global function with example usage: make_rotating_equity_info(num_assets, first_start, frequency, periods_between_starts, asset_lifetime, exchange) and returns: pd