code: def forward(self, inputs, begin_state=None): # pylint: disable=arguments-differ
          
          encoded = self.embedding(inputs)
          if not begin_state:
              begin_state = self.begin_state(batch_size=inputs.shape[1])
          encoded_raw = []
          encoded_dropped = []
          encoded, state = self.encoder(encoded, begin_state)
          encoded_raw.append(encoded)
          if self._dropout:
              encoded = nd.Dropout(encoded, p=self._dropout, axes=(0,))
          out = self.decoder(encoded)
          return out, state, encoded_raw, encoded_dropped
docs: Defines the forward computation. Arguments can be either
          :py:class:`NDArray` or :py:class:`Symbol`.
  
          Parameters
          -----------
          inputs : NDArray
              input tensor with shape `(sequence_length, batch_size)`
              when `layout` is "TNC".
          begin_state : list
              initial recurrent state tensor with length equals to num_layers-1.
              the initial state with shape `(num_layers, batch_size, num_hidden)`
  
          Returns
          --------
          out: NDArray
              output tensor with shape `(sequence_length, batch_size, input_size)`
              when `layout` is "TNC".
          out_states: list
              output recurrent state tensor with length equals to num_layers-1.
              the state with shape `(num_layers, batch_size, num_hidden)`
          encoded_raw: list
              The list of last output of the model's encoder.
              the shape of last encoder's output `(sequence_length, batch_size, num_hidden)`
          encoded_dropped: list
              The list of last output with dropout of the model's encoder.
              the shape of last encoder's dropped output `(sequence_length, batch_size, num_hidden)`