def get_datashift_params(data_shift=None, ye=0.5, te=None, se=None, re=None):
    """
    This factory simplifies the parameter generation process for a number of
    use cases. The parameters generated can be used with CausalClusterGenerator.generate_sample
    """
    data_shift_types = dict(
        no_shift=dict(
            shift_y=False,
            shift_x=False,
            shift_conditional_x=False,
            shift_conditional_y=False,
            y_cause_x=True,
            ye=ye,
            te=te,
            se=se,
            re=re,
        ),
        covariate_shift_y=dict(
            y_cause_x=True, shift_y=False, shift_x=True, re=re, te=te, se=se
        ),
        cond_covariate_shift_y=dict(
            y_cause_x=True,
            shift_y=False,
            shift_conditional_x=True,
            shift_x=False,
            re=re,
            te=te,
            se=se,
        ),
        covariate_shift_x=dict(
            y_cause_x=True, shift_y=False, shift_x=True, re=re, te=te, se=se
        ),
        label_shift=dict(y_cause_x=True, shift_y=True, shift_x=False, ye=ye),
        label_and_covariate_shift=dict(
            y_cause_x=True, shift_y=True, shift_x=True, ye=ye, re=re, te=te, se=se
        ),
        label_and_cond_covariate_shift=dict(
            y_cause_x=True,
            shift_y=True,
            shift_conditional_x=True,
            ye=ye,
            re=re,
            te=te,
            se=se,
        ),
        covariate_and_cond_label_shift=dict(
            y_cause_x=False,
            shift_x=True,
            shift_conditional_y=True,
            ye=ye,
            re=re,
            te=te,
            se=se,
        ),
    )

    if data_shift is not None:
        return data_shift_types[data_shift]

    return list(data_shift_types.keys())