code: def list_auxiliary_states(self):
          
          size = ctypes.c_uint()
          sarr = ctypes.POINTER(ctypes.c_char_p)()
          check_call(_LIB.MXSymbolListAuxiliaryStates(
              self.handle, ctypes.byref(size), ctypes.byref(sarr)))
          return [py_str(sarr[i]) for i in range(size.value)]
docs: Lists all the auxiliary states in the symbol.
  
          Example
          -------
          >>> a = mx.sym.var('a')
          >>> b = mx.sym.var('b')
          >>> c = a + b
          >>> c.list_auxiliary_states()
          []
  
          Example of auxiliary states in `BatchNorm`.
  
          >>> data = mx.symbol.Variable('data')
          >>> weight = mx.sym.Variable(name='fc1_weight')
          >>> fc1  = mx.symbol.FullyConnected(data = data, weight=weight, name='fc1', num_hidden=128)
          >>> fc2 = mx.symbol.BatchNorm(fc1, name='batchnorm0')
          >>> fc2.list_auxiliary_states()
          ['batchnorm0_moving_mean', 'batchnorm0_moving_var']
  
          Returns
          -------
          aux_states : list of str
              List of the auxiliary states in input symbol.
  
          Notes
          -----
          Auxiliary states are special states of symbols that do not correspond to an argument,
          and are not updated by gradient descent. Common examples of auxiliary states
          include the `moving_mean` and `moving_variance` in `BatchNorm`.
          Most operators do not have auxiliary states.