code: def step(self):
      assert self._track_params is not None, (
          "You will need to use `.apply(params)`"
          " to initialize the MovingAverageTracker."
      )
      for k, v in self._track_params.items():
          assert shape_is_known(v.shape), (
              "All shapes of the tracked parameters must be given."
              " The shape of {} is {}, and it has not been fully initialized."
              " You should call step after the first forward of the model.".format(
                  k, v.shape
              )
          )
      ctx = next(iter(self._track_params.values())).list_ctx()[0]
      if self._average_params is None:
          self._average_params = OrderedDict(
              [
                  (k, v.data(ctx).copy())
                  for k, v in self._track_params.items()
              ]
          )
      self._n_steps += 1
      decay = 1.0 / self._n_steps
      for name, average_param in self._average_params.items():
          average_param += decay * (
              self._track_params[name].data(ctx) - average_param
          )
  
imports: import warnings
  import numpy
  import mxnet
  from collections import defaultdict
  from mxnet.gluon import Parameter
  from mxnet.util import use_np
  from typing import Iterable, Optional, Tuple
  from collections import OrderedDict
  from mxnet.gluon.utils import shape_is_known
label_desc: Use image node_id 6 for calling the AverageSGDTracker obj's underlying member method code with example usage: obj.step() without return types