code: def unirange(a, b):
      """Returns a regular expression string to match the given non-BMP range."""
      if b < a:
          raise ValueError("Bad character range")
      if a < 0x10000 or b < 0x10000:
          raise ValueError(
              "unirange is only defined for non-BMP ranges"
          )
  
      if sys.maxunicode > 0xFFFF:
          # wide build
          return "[%s-%s]" % (unichr(a), unichr(b))
      else:
          # narrow build stores surrogates, and the 're' module handles them
          # (incorrectly) as characters.  Since there is still ordering among
          # these characters, expand the range to one that it understands.  Some
          # background in http://bugs.python.org/issue3665 and
          # http://bugs.python.org/issue12749
          #
          # Additionally, the lower constants are using unichr rather than
          # literals because jython [which uses the wide path] can't load this
          # file if they are literals.
          ah, al = _surrogatepair(a)
          bh, bl = _surrogatepair(b)
          if ah == bh:
              return "(?:%s[%s-%s])" % (
                  unichr(ah),
                  unichr(al),
                  unichr(bl),
              )
          else:
              buf = []
              buf.append(
                  "%s[%s-%s]"
                  % (
                      unichr(ah),
                      unichr(al),
                      ah == bh and unichr(bl) or unichr(0xDFFF),
                  )
              )
              if ah - bh > 1:
                  buf.append(
                      "[%s-%s][%s-%s]" % unichr(ah + 1),
                      unichr(bh - 1),
                      unichr(0xDC00),
                      unichr(0xDFFF),
                  )
              if ah != bh:
                  buf.append(
                      "%s[%s-%s]"
                      % (unichr(bh), unichr(0xDC00), unichr(bl))
                  )
  
              return "(?:" + "|".join(buf) + ")"
  
imports: import re
  import sys
label_desc: Use image node_id 12 for calling a global function with example usage: unirange(a, b) and returns: unknown, unknown, unknown