docs: def create_turnover_tear_sheet(factor_data, turnover_periods=None):
      """
      Creates a tear sheet for analyzing the turnover properties of a factor.
  
      Parameters
      ----------
      factor_data : pd.DataFrame - MultiIndex
          A MultiIndex DataFrame indexed by date (level 0) and asset (level 1),
          containing the values for a single alpha factor, forward returns for
          each period, the factor quantile/bin that factor value belongs to, and
          (optionally) the group the asset belongs to.
          - See full explanation in utils.get_clean_factor_and_forward_returns
      turnover_periods : sequence[string], optional
          Periods to compute turnover analysis on. By default periods in
          'factor_data' are used but custom periods can provided instead. This
          can be useful when periods in 'factor_data' are not multiples of the
          frequency at which factor values are computed i.e. the periods
          are 2h and 4h and the factor is computed daily and so values like
          ['1D', '2D'] could be used instead
      """
  
      if turnover_periods is None:
          turnover_periods = utils.get_forward_returns_columns(
              factor_data.columns)
  
      quantile_factor = factor_data['factor_quantile']
  
      quantile_turnover = \
          {p: pd.concat([perf.quantile_turnover(quantile_factor, q, p)
                         for q in range(1, int(quantile_factor.max()) + 1)],
                        axis=1)
              for p in turnover_periods}
  
      autocorrelation = pd.concat(
          [perf.factor_rank_autocorrelation(factor_data, period) for period in
           turnover_periods], axis=1)
  
      plotting.plot_turnover_table(autocorrelation, quantile_turnover)
  
      fr_cols = len(turnover_periods)
      columns_wide = 1
      rows_when_wide = (((fr_cols - 1) // 1) + 1)
      vertical_sections = fr_cols + 3 * rows_when_wide + 2 * fr_cols
      gf = GridFigure(rows=vertical_sections, cols=columns_wide)
  
      for period in turnover_periods:
          if quantile_turnover[period].isnull().all().all():
              continue
          plotting.plot_top_bottom_quantile_turnover(quantile_turnover[period],
                                                     period=period,
                                                     ax=gf.next_row())
  
      for period in autocorrelation:
          if autocorrelation[period].isnull().all():
              continue
          plotting.plot_factor_rank_auto_correlation(autocorrelation[period],
                                                     period=period,
                                                     ax=gf.next_row())
  
      plt.show()
      gf.close()