code: def make_equity_info(cls):
      start = cls.START_DATE - pd.Timedelta(days=1)
      end = cls.END_DATE
      early_end = cls.HALF_WAY_POINT
      return pd.DataFrame(
          [
              ["A", "Ayy Inc.", start, end, "E"],
              ["B", "early end", start, early_end, "E"],
              ["C", "C Inc.", start, end, "E"],
          ],
          index=[ord("A"), ord("B"), ord("C")],
          columns=(
              "symbol",
              "asset_name",
              "start_date",
              "end_date",
              "exchange",
          ),
      )
  
imports: from functools import partial
  import pandas
  from pandas.util.testing import assert_frame_equal
  from zipline.errors import NoFurtherDataError
  from zipline.pipeline import Pipeline, CustomFactor, CustomFilter, CustomClassifier, SimplePipelineEngine
  from zipline.pipeline.data.testing import TestingDataSet
  from zipline.pipeline.domain import CA_EQUITIES, EquitySessionDomain, GB_EQUITIES, US_EQUITIES
  from zipline.pipeline.factors import SimpleMovingAverage
  from zipline.pipeline.filters.smoothing import All
  from zipline.testing import ZiplineTestCase, parameter_space, ExplodingObject
  from zipline.testing.fixtures import WithTradingSessions, WithSeededRandomPipelineEngine, WithAssetFinder
  from zipline.utils.classproperty import classproperty
  from zipline.utils.input_validation import _qualified_name
  from zipline.utils.numpy_utils import int64_dtype
label_desc: Use image node_id 2 for calling the TestDownsampledRowwiseOperation obj's underlying member method code with example usage: obj.make_equity_info(cls) and returns: pd