code: def begin_state(self, batch_size=0, func=ndarray.zeros, **kwargs):
          
          assert not self._modified, \
              "After applying modifier cells (e.g. ZoneoutCell) the base " \
              "cell cannot be called directly. Call the modifier cell instead."
          states = []
          for info in self.state_info(batch_size):
              self._init_counter += 1
              if info is not None:
                  info.update(kwargs)
              else:
                  info = kwargs
              state = func(name='%sbegin_state_%d'%(self._prefix, self._init_counter),
                           **info)
              states.append(state)
          return states
docs: Initial state for this cell.
  
          Parameters
          ----------
          func : callable, default symbol.zeros
              Function for creating initial state.
  
              For Symbol API, func can be `symbol.zeros`, `symbol.uniform`,
              `symbol.var etc`. Use `symbol.var` if you want to directly
              feed input as states.
  
              For NDArray API, func can be `ndarray.zeros`, `ndarray.ones`, etc.
          batch_size: int, default 0
              Only required for NDArray API. Size of the batch ('N' in layout)
              dimension of input.
  
          **kwargs :
              Additional keyword arguments passed to func. For example
              `mean`, `std`, `dtype`, etc.
  
          Returns
          -------
          states : nested list of Symbol
              Starting states for the first RNN step.