code: def punctuation_variations(string, language):
      matches = [
          m for m in get_punctuation_regex(language).finditer(string)
      ]
      if not matches:
          return set()
  
      matches = sorted(matches, key=lambda x: x.start())
      values = [
          ({START: m.start(), END: m.end()}, (m.group(0), ""))
          for m in matches
      ]
  
      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 3 for calling a global function with example usage: punctuation_variations(string, language) and returns: variations, set, set