code: def test_downsampled_rank(self):
      downsampled_rank = self.factor.rank().downsample("month_start")
      pipeline = Pipeline({"rank": downsampled_rank})
  
      results_month_start = self.pipeline_engine.run_pipeline(
          pipeline,
          self.START_DATE,
          self.END_DATE,
      )
  
      half_way_start = self.HALF_WAY_POINT + pd.Timedelta(days=1)
      results_halfway_start = self.pipeline_engine.run_pipeline(
          pipeline,
          half_way_start,
          self.END_DATE,
      )
  
      results_month_start_aligned = results_month_start.loc[
          half_way_start:
      ]
  
      assert_frame_equal(
          results_month_start_aligned, results_halfway_start
      )
  
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 3 for calling the TestDownsampledRowwiseOperation obj's underlying member method code with example usage: obj.test_downsampled_rank() without return types