code: def update_multi_precision(self, index, weight, grad, state):
          
          if self.multi_precision and weight.dtype == numpy.float16:
              # Wrapper for mixed precision
              weight_master_copy = state[0]
              original_state = state[1]
              grad32 = grad.astype(numpy.float32)
              self.update(index, weight_master_copy, grad32, original_state)
              cast(weight_master_copy, dtype=weight.dtype, out=weight)
          else:
              self.update(index, weight, grad, state)
docs: Updates the given parameter using the corresponding gradient and state.
          Mixed precision version.
  
          Parameters
          ----------
          index : int
              The unique index of the parameter into the individual learning
              rates and weight decays. Learning rates and weight decay
              may be set via `set_lr_mult()` and `set_wd_mult()`, respectively.
          weight : NDArray
              The parameter to be updated.
          grad : NDArray
              The gradient of the objective with respect to this parameter.
          state : any obj
              The state returned by `create_state()`.