code: def adafactor_optimizer_from_hparams(hparams, lr):
    
    if hparams.optimizer_adafactor_decay_type == "adam":
      decay_rate = adafactor_decay_rate_adam(
          hparams.optimizer_adafactor_beta2)
    elif hparams.optimizer_adafactor_decay_type == "pow":
      decay_rate = adafactor_decay_rate_pow(
          hparams.optimizer_adafactor_memory_exponent)
    else:
      raise ValueError("unknown optimizer_adafactor_decay_type")
    if hparams.weight_dtype == "bfloat16":
      parameter_encoding = quantization.EighthPowerEncoding()
    else:
      parameter_encoding = None
    return AdafactorOptimizer(
        multiply_by_parameter_scale=(
            hparams.optimizer_adafactor_multiply_by_parameter_scale),
        learning_rate=lr,
        decay_rate=decay_rate,
        beta1=hparams.optimizer_adafactor_beta1,
        clipping_threshold=hparams.optimizer_adafactor_clipping_threshold,
        factored=hparams.optimizer_adafactor_factored,
        simulated_quantize_bits=getattr(
            hparams, "simulated_parameter_quantize_bits", 0),
        parameter_encoding=parameter_encoding,
        use_locking=False,
        name="Adafactor")
docs: Create an Adafactor optimizer based on model hparams.
  
    Args:
      hparams: model hyperparameters
      lr: learning rate scalar.
    Returns:
      an AdafactorOptimizer
    Raises:
      ValueError: on illegal values