code: def _open(self):
      # Screen
      s = self.fp.read(13)
      if s[:6] not in [b"GIF87a", b"GIF89a"]:
          raise SyntaxError("not a GIF file")
  
      self.info["version"] = s[:6]
      self._size = i16(s[6:]), i16(s[8:])
      self.tile = []
      flags = i8(s[10])
      bits = (flags & 7) + 1
  
      if flags & 128:
          # get global palette
          self.info["background"] = i8(s[11])
          # check if palette contains colour indices
          p = self.fp.read(3 << bits)
          for i in range(0, len(p), 3):
              if not (
                  i // 3 == i8(p[i]) == i8(p[i + 1]) == i8(p[i + 2])
              ):
                  p = ImagePalette.raw("RGB", p)
                  self.global_palette = self.palette = p
                  break
  
      self.__fp = self.fp  # FIXME: hack
      self.__rewind = self.fp.tell()
      self._n_frames = None
      self._is_animated = None
      self._seek(0)
  
imports: import itertools
  from .None import Image, ImageChops, ImageFile, ImagePalette, ImageSequence
  from ._binary import i8, i16le, o8, o16le
label_desc: Use image node_id 2 for calling the GifImageFile obj's underlying member method code with example usage: obj._open() without return types