docs: def decodelzw(encoded):
      """Decompress LZW (Lempel-Ziv-Welch) encoded TIFF strip (byte string).
  
      The strip must begin with a CLEAR code and end with an EOI code.
  
      This is an implementation of the LZW decoding algorithm described in (1).
      It is not compatible with old style LZW compressed files like quad-lzw.tif.
  
      """
      unpack = struct.unpack
  
      if sys.version[0] == '2':
          newtable = [chr(i) for i in range(256)]
      else:
          newtable = [bytes([i]) for i in range(256)]
      newtable.extend((0, 0))
  
      def next_code():
          """Return integer of `bitw` bits at `bitcount` position in encoded."""
          start = bitcount // 8
          s = encoded[start:start+4]
          try:
              code = unpack('>I', s)[0]
          except Exception:
              code = unpack('>I', s + b'\x00'*(4-len(s)))[0]
          code = code << (bitcount % 8)
          code = code & mask
          return code >> shr
  
      switchbitch = {  # code: bit-width, shr-bits, bit-mask
          255: (9, 23, int(9*'1'+'0'*23, 2)),
          511: (10, 22, int(10*'1'+'0'*22, 2)),
          1023: (11, 21, int(11*'1'+'0'*21, 2)),
          2047: (12, 20, int(12*'1'+'0'*20, 2)), }
      bitw, shr, mask = switchbitch[255]
      bitcount = 0
  
      if len(encoded) < 4:
          raise ValueError("strip must be at least 4 characters long")
  
      if next_code() != 256:
          raise ValueError("strip must begin with CLEAR code")
  
      code = oldcode = 0
      result = []
      while True:
          code = next_code()  # ~5% faster when inlining this function
          bitcount += bitw
          if code == 257:  # EOI
              break
          if code == 256:  # CLEAR
              table = newtable[:]
              lentable = 258
              bitw, shr, mask = switchbitch[255]
              code = next_code()
              bitcount += bitw
              if code == 257:  # EOI
                  break
              result.append(table[code])
          else:
              if code < lentable:
                  decoded = table[code]
                  newcode = table[oldcode] + decoded[:1]
              else:
                  newcode = table[oldcode]
                  newcode += newcode[:1]
                  decoded = newcode
              result.append(decoded)
              table.append(newcode)
              lentable += 1
          oldcode = code
          if lentable in switchbitch:
              bitw, shr, mask = switchbitch[lentable]
  
      if code != 257:
          raise ValueError("unexpected end of stream (code %i)" % code)
  
      return b''.join(result)