code: def _update_amsbound(
      p,
      g,
      m,
      v,
      v_hat,
      t,
      alpha,
      init_alpha,
      beta1,
      beta2,
      eps,
      final_lr,
      gamma,
      bias_correction,
  ):
      if bias_correction:
          alpha_t = (
              alpha * np.sqrt(1.0 - beta2**t) / (1.0 - beta1**t)
          )
      else:
          alpha_t = alpha
      final_lr_ = final_lr * (alpha / init_alpha)
      m[...] = beta1 * m + (1 - beta1) * g
      v[...] = beta2 * v + (1 - beta2) * g * g
      v_hat[...] = np.maximum(v_hat, v)
      denom = np.sqrt(v_hat) + eps
      lb = final_lr_ * (1 - 1 / (gamma * t + 1))
      ub = final_lr_ * (1 + 1 / (gamma * t))
      eta = np.clip(alpha_t / denom, lb, ub)
      p[...] = p - eta * m
  
file_path: nnabla/python/test/solver/test_amsbound.py
imports: import pytest
  import nnabla.solvers
  import numpy
  from solver_test_utils import solver_tester, RefSolver
  from nbla_test_utils import list_context
label_desc: Use image node_id 1 for calling a global function with example usage: _update_amsbound(p, g, m, v, v_hat, t, alpha, init_alpha, beta1, beta2, eps, final_lr, gamma, bias_correction) without return types