code: def make_equity_info(cls):
      out = pd.concat(
          [
              # 15 assets on each exchange. Each asset lives for 5 days.
              # A new asset starts each day.
              make_rotating_equity_info(
                  num_assets=20,
                  first_start=cls.START_DATE,
                  frequency=get_calendar(exchange).day,
                  periods_between_starts=1,
                  # NOTE: The asset_lifetime parameter name is a bit
                  #       misleading. It determines the number of trading
                  #       days between each asset's start_date and end_date,
                  #       so assets created with this method actual "live"
                  #       for (asset_lifetime + 1) days. But, since pipeline
                  #       doesn't show you an asset the day it IPOs, this
                  #       number matches the number of days that each asset
                  #       should appear in a pipeline output.
                  asset_lifetime=5,
                  exchange=exchange,
              )
              for exchange in cls.EXCHANGE_INFO.exchange
          ],
          ignore_index=True,
      )
      assert_equal(out.end_date.max(), cls.END_DATE)
      return out
  
imports: from itertools import cycle, islice
  from nose_parameterized import parameterized
  import numpy
  import pandas
  from trading_calendars import get_calendar
  from zipline.assets.synthetic import make_rotating_equity_info
  from zipline.data.in_memory_daily_bars import InMemoryDailyBarReader
  from zipline.pipeline.domain import CA_EQUITIES, GB_EQUITIES, US_EQUITIES
  from zipline.pipeline import Pipeline
  from zipline.pipeline.data import EquityPricing, USEquityPricing
  from zipline.pipeline.engine import SimplePipelineEngine
  from zipline.pipeline.loaders.equity_pricing_loader import EquityPricingLoader
  from zipline.pipeline.loaders.synthetic import NullAdjustmentReader
  from zipline.testing.predicates import assert_equal
  from zipline.testing.core import parameter_space, random_tick_prices
  import zipline.testing.fixtures
label_desc: Use image node_id 1 for calling the InternationalEquityTestCase obj's underlying member method code with example usage: obj.make_equity_info(cls) and returns: out