code: def _get_transformations(self, current_text, indices_to_modify):
      words = current_text.words
      num_idx = []
      num_words = []
  
      # find indexes of alphabetical words
      for idx in indices_to_modify:
          word = words[idx].lower()
          for number in STR_NUM:
              if number in word:
                  if word in ["point", "and"]:
                      if 0 < idx and (idx - 1) in num_idx:
                          num_idx.append(idx)
                  else:
                      num_idx.append(idx)
                  break
  
          if word.isdigit():
              num_words.append([[idx], word])
  
      # cluster adjacent indexes to get whole number
      num_idx = [
          list(group) for group in mit.consecutive_groups(num_idx)
      ]
      num_words += idx_to_words(num_idx, words)
  
      # replace original numbers with new numbers
      transformed_texts = []
      for idx, word in num_words:
          replacement_words = self._get_new_number(word)
          for r in replacement_words:
              if r == word:
                  continue
              text = current_text.replace_word_at_index(idx[0], str(r))
              if len(idx) > 1:
                  index = idx[1]
                  for i in idx[1:]:
                      text = text.delete_word_at_index(index)
              transformed_texts.append(text)
      return transformed_texts
  
file_path: TextAttack/textattack/transformations/word_swaps/word_swap_change_number.py
imports: import more_itertools
  from num2words import num2words
  import numpy
  from word2number import w2n
  from .word_swap import WordSwap
label_desc: Use image node_id 2 for calling the WordSwapChangeNumber obj's underlying member method code with example usage: obj._get_transformations(current_text, indices_to_modify) and returns: transformed_texts