code: def test_memory_efficient_step_chain(self):
      self._generate_inner_optim(True)
      self._pseudo_backward(self.fp16_optim.param_groups)
      # pseudo upscale
      self.fp16_optim._fp16_to_fp32()
      self.fp16_optim.loss_scaler.check_overflow(
          self.fp16_optim.param_groups
      )
      if not self.fp16_optim.loss_scaler.is_overflow:
          self.assertIs(
              self.fp16_optim.param_groups,
              self.fp16_optim.inner_optimizer.param_groups,
          )
          self._is_all_float(self.fp16_optim.param_groups)
  
          self._pseudo_step(
              self.fp16_optim.inner_optimizer.param_groups
          )
      self.fp16_optim._fp32_to_fp16()
      self.assertIs(
          self.fp16_optim.param_groups,
          self.fp16_optim.inner_optimizer.param_groups,
      )
      self._is_all_half(self.fp16_optim.param_groups)
  
      self.fp16_optim.loss_scaler.update_scale()
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import copy
  import unittest
  import torch
  from pytext.optimizer import fp16_optimizer
  from torch.autograd import Variable
label_desc: Use image node_id 13 for calling the TestFp16Optimizer obj's underlying member method code with example usage: obj.test_memory_efficient_step_chain() without return types