def METHOD_NAME(
    learning_rate_type, config, optimizer, last_step=-1
):
    lr_scheduler = None
    if learning_rate_type == "constant_learning_rate":
        lr_scheduler = learning_schedules.Constant(optimizer, last_step=last_step)
    if learning_rate_type == "exponential_decay_learning_rate":
        lr_scheduler = learning_schedules.ExponentialDecay(
            optimizer,
            config["decay_steps"],
            config["decay_factor"],
            config["staircase"],
            last_step=last_step,
        )
    if learning_rate_type == "manual_step_learning_rate":
        if "schedule" not in config:
            raise ValueError("Empty learning rate schedule.")
        learning_rate_step_boundaries = [x.step for x in config["schedule"]]
        learning_rate_sequence = [config.initial_learning_rate]
        learning_rate_sequence += [x.learning_rate for x in config["schedule"]]
        lr_scheduler = learning_schedules.ManualStepping(
            optimizer,
            learning_rate_step_boundaries,
            learning_rate_sequence,
            last_step=last_step,
        )
    if learning_rate_type == "cosine_decay_learning_rate":
        lr_scheduler = learning_schedules.CosineDecayWithWarmup(
            optimizer,
            config["total_steps"],
            config["warmup_learning_rate"],
            config["warmup_steps"],
            last_step=last_step,
        )
    if lr_scheduler is None:
        raise ValueError("Learning_rate %s not supported." % learning_rate_type)
    return lr_scheduler