docs: def mean_return_by_quantile(factor_data,
                              by_date=False,
                              by_group=False,
                              demeaned=True,
                              group_adjust=False):
      """
      Computes mean returns for factor quantiles across
      provided forward returns columns.
  
      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
      by_date : bool
          If True, compute quantile bucket returns separately for each date.
      by_group : bool
          If True, compute quantile bucket returns separately for each group.
      demeaned : bool
          Compute demeaned mean returns (long short portfolio)
      group_adjust : bool
          Returns demeaning will occur on the group level.
  
      Returns
      -------
      mean_ret : pd.DataFrame
          Mean period wise returns by specified factor quantile.
      std_error_ret : pd.DataFrame
          Standard error of returns by specified quantile.
      """
  
      if group_adjust:
          grouper = [factor_data.index.get_level_values('date')] + ['group']
          factor_data = utils.demean_forward_returns(factor_data, grouper)
      elif demeaned:
          factor_data = utils.demean_forward_returns(factor_data)
      else:
          factor_data = factor_data.copy()
  
      grouper = ['factor_quantile', factor_data.index.get_level_values('date')]
  
      if by_group:
          grouper.append('group')
  
      group_stats = factor_data.groupby(grouper)[
          utils.get_forward_returns_columns(factor_data.columns)] \
          .agg(['mean', 'std', 'count'])
  
      mean_ret = group_stats.T.xs('mean', level=1).T
  
      if not by_date:
          grouper = [mean_ret.index.get_level_values('factor_quantile')]
          if by_group:
              grouper.append(mean_ret.index.get_level_values('group'))
          group_stats = mean_ret.groupby(grouper)\
              .agg(['mean', 'std', 'count'])
          mean_ret = group_stats.T.xs('mean', level=1).T
  
      std_error_ret = group_stats.T.xs('std', level=1).T \
          / np.sqrt(group_stats.T.xs('count', level=1).T)
  
      return mean_ret, std_error_ret