code: def numbers_variations(string, language, builtin_entity_parser):
      if not supports_num2words(language):
          return set()
  
      number_entities = builtin_entity_parser.parse(
          string, scope=[SNIPS_NUMBER], use_cache=True
      )
  
      number_entities = sorted(
          number_entities, key=lambda x: x[RES_MATCH_RANGE][START]
      )
      if not number_entities:
          return set()
  
      digit_values = [digit_value(e) for e in number_entities]
      alpha_values = [
          alphabetic_value(e, language) for e in number_entities
      ]
  
      values = [
          (n[RES_MATCH_RANGE], (d, a))
          for (n, d, a) in zip(
              number_entities, digit_values, alpha_values
          )
          if a is not None
      ]
  
      n_values = len(values)
      if 2**n_values > MAX_ENTITY_VARIATIONS:
          return set()
  
      combinations = itertools.product(range(2), repeat=n_values)
      variations = set()
      for c in combinations:
          ranges_and_utterances = [
              (values[i][0], values[i][1][ix]) for i, ix in enumerate(c)
          ]
          variations.add(
              build_variated_query(string, ranges_and_utterances)
          )
      return variations
  
file_path: snips-nlu/snips_nlu/string_variations.py
imports: from __future__ import unicode_literals
  import itertools
  import re
  from builtins import range, str, zip
  from future.utils import iteritems
  from snips_nlu.constants import END, LANGUAGE_DE, LANGUAGE_EN, LANGUAGE_ES, LANGUAGE_FR, RESOLVED_VALUE, RES_MATCH_RANGE, SNIPS_NUMBER, START, VALUE
  from snips_nlu.languages import get_default_sep, get_punctuation_regex, supports_num2words
  from snips_nlu.preprocessing import tokenize_light
label_desc: Use image node_id 6 for calling a global function with example usage: numbers_variations(string, language, builtin_entity_parser) and returns: variations, set, set, set