code: def decode(
      self, tokens: Union[TokensType, TokenIDsType]
  ) -> SentencesType:
      is_multiple_sentences = is_tokens_from_multiple_sentences(tokens)
      if not is_multiple_sentences:
          tokens = [tokens]
      token_type = get_token_type(tokens)
      if token_type is str:
          ret = [
              "".join(ele_tokens).replace(self._suffix, " ").strip()
              for ele_tokens in tokens
          ]
      elif token_type is int:
          if self._vocab is None:
              raise TokenizerDecodeWithoutVocabError
          ret = [
              "".join(self._vocab.to_tokens(ele_tokens))
              .replace(self._suffix, " ")
              .strip()
              for ele_tokens in tokens
          ]
      else:
          raise TokenTypeNotSupportedError(token_type)
      if is_multiple_sentences:
          return ret
      else:
          return ret[0]
  
file_path: gluon-nlp/src/gluonnlp/data/tokenizers/subword_nmt.py
imports: import os
  from typing import Optional, Union, List
  from .base import TOKENIZER_REGISTRY, BaseTokenizerWithVocab, TokenizerEncodeWithoutVocabError, TokenizerDecodeWithoutVocabError, TokenTypeNotSupportedError, rebuild_offset_from_tokens, TokensType, TokenIDsType, TokenOffsetsType, SentencesType, is_tokens_from_multiple_sentences, get_token_type
  from ..vocab import Vocab, load_vocab
  from ...utils.lazy_imports import try_import_subword_nmt
label_desc: Use image node_id 5 for calling the SubwordNMTTokenizer obj's underlying member method code with example usage: obj.decode(tokens) and returns: ret, ret