code: def forward(self, input):
          
          sl,bs = input.size()
          if bs!=self.bs:
              self.bs=bs
              self.reset()
          with set_grad_enabled(self.training):
              emb = self.encoder_with_dropout(input, dropout=self.dropoute if self.training else 0)
              emb = self.dropouti(emb)
              raw_output = emb
              new_hidden,raw_outputs,outputs = [],[],[]
              for l, (rnn,drop) in enumerate(zip(self.rnns, self.dropouths)):
                  current_input = raw_output
                  with warnings.catch_warnings():
                      warnings.simplefilter("ignore")
                      raw_output, new_h = rnn(raw_output, self.hidden[l])
                  new_hidden.append(new_h)
                  raw_outputs.append(raw_output)
                  if l != self.n_layers - 1: raw_output = drop(raw_output)
                  outputs.append(raw_output)
  
              self.hidden = repackage_var(new_hidden)
          return raw_outputs, outputs
docs: Invoked during the forward propagation of the RNN_Encoder module.
          Args:
              input (Tensor): input of shape (sentence length x batch_size)
  
          Returns:
              raw_outputs (tuple(list (Tensor), list(Tensor)): list of tensors evaluated from each RNN layer without using
              dropouth, list of tensors evaluated from each RNN layer using dropouth,