docs: def unpackints(data, dtype, itemsize, runlen=0):
      """Decompress byte string to array of integers of any bit size <= 32.
  
      Parameters
      ----------
      data : byte str
          Data to decompress.
      dtype : numpy.dtype or str
          A numpy boolean or integer type.
      itemsize : int
          Number of bits per integer.
      runlen : int
          Number of consecutive integers, after which to start at next byte.
  
      """
      if itemsize == 1:  # bitarray
          data = numpy.fromstring(data, '|B')
          data = numpy.unpackbits(data)
          if runlen % 8:
              data = data.reshape(-1, runlen+(8-runlen%8))
              data = data[:, :runlen].reshape(-1)
          return data.astype(dtype)
  
      dtype = numpy.dtype(dtype)
      if itemsize in (8, 16, 32, 64):
          return numpy.fromstring(data, dtype)
      if itemsize < 1 or itemsize > 32:
          raise ValueError("itemsize out of range: %i" % itemsize)
      if dtype.kind not in "biu":
          raise ValueError("invalid dtype")
  
      itembytes = next(i for i in (1, 2, 4, 8) if 8 * i >= itemsize)
      if itembytes != dtype.itemsize:
          raise ValueError("dtype.itemsize too small")
      if runlen == 0:
          runlen = len(data) // itembytes
      skipbits = runlen*itemsize % 8
      if skipbits:
          skipbits = 8 - skipbits
      shrbits = itembytes*8 - itemsize
      bitmask = int(itemsize*'1'+'0'*shrbits, 2)
      dtypestr = '>' + dtype.char  # dtype always big endian?
  
      unpack = struct.unpack
      l = runlen * (len(data)*8 // (runlen*itemsize + skipbits))
      result = numpy.empty((l, ), dtype)
      bitcount = 0
      for i in range(len(result)):
          start = bitcount // 8
          s = data[start:start+itembytes]
          try:
              code = unpack(dtypestr, s)[0]
          except Exception:
              code = unpack(dtypestr, s + b'\x00'*(itembytes-len(s)))[0]
          code = code << (bitcount % 8)
          code = code & bitmask
          result[i] = code >> shrbits
          bitcount += itemsize
          if (i+1) % runlen == 0:
              bitcount += skipbits
      return result