<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def quantile_turnover(quantile_factor, quantile, period=1):
 """ Computes the proportion of names in a factor quantile that were not in that quantile in the previous period. Parameters quantile_factor : pd.Series DataFrame with date, asset and factor quantile. quantile : int Quantile on which to perform turnover analysis. period: string or int, optional Period over which to calculate the turnover. If it is a string it must follow pandas.Timedelta constructor format (e.g. '1 days', '1D', '30m', '3h', '1D1h', etc). Returns ------- quant_turnover : pd.Series Period by period turnover for that quantile. """


    quant_names = quantile_factor[quantile_factor == quantile]
    quant_name_sets = quant_names.groupby(level=['date']).apply(
        lambda x: set(x.index.get_level_values('asset')))

    if isinstance(period, int):
        name_shifted = quant_name_sets.shift(period)
    else:
        shifted_idx = utils.add_custom_calendar_timedelta(
                quant_name_sets.index, -pd.Timedelta(period),
                quantile_factor.index.levels[0].freq)
        name_shifted = quant_name_sets.reindex(shifted_idx)
        name_shifted.index = quant_name_sets.index

    new_names = (quant_name_sets - name_shifted).dropna()
    quant_turnover = new_names.apply(
        lambda x: len(x)) / quant_name_sets.apply(lambda x: len(x))
    quant_turnover.name = quantile
    return quant_turnover