code: 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:
          input_periods = utils.get_forward_returns_columns(
              factor_data.columns,
              require_exact_day_multiple=True,
          ).get_values()
          turnover_periods = utils.timedelta_strings_to_integers(
              input_periods
          )
      else:
          turnover_periods = utils.timedelta_strings_to_integers(
              turnover_periods,
          )
  
      quantile_factor = factor_data["factor_quantile"]
  
      quantile_turnover = {
          p: pd.concat(
              [
                  perf.quantile_turnover(quantile_factor, q, p)
                  for q in quantile_factor.sort_values()
                  .unique()
                  .tolist()
              ],
              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()
  
file_path: alphalens/alphalens/tears.py
imports: import matplotlib.gridspec
  import matplotlib.pyplot
  import pandas
  import warnings
  from .None import plotting
  from .None import performance
  from .None import utils
label_desc: Use image node_id 4 for calling a global function with example usage: create_turnover_tear_sheet(factor_data, turnover_periods) without return types