code: def unscale_with_stashed_python(
      self, model_grads, stashed_master_grads, master_grads, a, b
  ):
      for model, stashed, master in zip(
          model_grads, stashed_master_grads, master_grads
      ):
          if model is None and stashed is None:
              continue
          else:
              if not LossScaler.warned_unscaling_non_fp32_grad:
                  if master.dtype != torch.float32:
                      maybe_print(
                          "Attempting to unscale a grad with type {} ".format(
                              master.type()
                          )
                          + "Unscaling non-fp32 grads may indicate an error. "
                          "When using Amp, you don't need to call .half() on your model."
                      )
                      LossScaler.warned_unscaling_non_fp32_grad = True
              self._has_overflow = axpby_check_overflow_python(
                  model, stashed, master, a, b, self.dynamic
              )
              if self._has_overflow and self.dynamic:
                  break
  
file_path: apex/apex/amp/scaler.py
imports: import torch
  from ..multi_tensor_apply import multi_tensor_applier
  from ._amp_state import _amp_state, master_params, maybe_print
  from itertools import product
label_desc: Use image node_id 5 for calling the LossScaler obj's underlying member method code with example usage: obj.unscale_with_stashed_python(model_grads, stashed_master_grads, master_grads, a, b) without return types