class_docstr: RNN encoder encoding each word via a bidirectional LSTM over character
  embeddings to obtain word representations, and then an LSTM (optionally
  bidirectional in first layer) to combine word representations.
  
  Uses nn.LSTM for cuDNN support / ONNX exportability.
code: def forward(self, src_tokens, src_lengths, char_inds, word_lengths):
      x = self.embed_chars(
          src_tokens=src_tokens,
          src_lengths=src_lengths,
          char_inds=char_inds,
          word_lengths=word_lengths,
      )
  
      if self.embed_tokens is not None:
          embedded_tokens = self.embed_tokens(src_tokens)
  
          # (seqlen, bsz, token_embed_dim)
          embedded_tokens = embedded_tokens.transpose(0, 1)
  
          # (seqlen, bsz, total_word_embed_dim)
          x = torch.cat([x, embedded_tokens], dim=2)
  
      if self.dropout_in != 0:
          x = F.dropout(x, p=self.dropout_in, training=self.training)
  
      embedded_words = x
  
      unpacked_output, final_hiddens, final_cells = self.bilstm(
          embeddings=x, lengths=src_lengths
      )
  
      return (
          unpacked_output,
          final_hiddens,
          final_cells,
          src_lengths,
          src_tokens,
          embedded_words,
      )
  
imports: import logging
  from ast import literal_eval
  import torch
  import torch.nn.functional
  from fairseq.models import FairseqEncoder, register_model, register_model_architecture
  from pytorch_translate import char_encoder, model_constants, rnn, utils, vocab_constants
  from pytorch_translate.common_layers import Embedding, VariableTracker
  from pytorch_translate.data.dictionary import TAGS
label_desc: Use image node_id 2 for calling the CharRNNEncoder obj's underlying member method code with example usage: obj.forward(src_tokens, src_lengths, char_inds, word_lengths) and returns: unpacked_output,  final_hiddens,  final_cells,  src_lengths,  src_tokens,  embedded_words