docs: def humanize_bytes(bytes, raw=False, precision=1):
      """Return a humanized string representation of a number of bytes.
  
      >>> humanize_bytes(1)
      '1 byte'
      >>> humanize_bytes(2)
      '2.0 bytes'
      >>> humanize_bytes(1024)
      '1.0 kB'
      >>> humanize_bytes(1024*123)
      '123.0 kB'
      >>> humanize_bytes(1024*12342)
      '12.1 MB'
      >>> humanize_bytes(1024*12342, precision=2)
      '12.05 MB'
      >>> humanize_bytes(1024*1234, precision=2)
      '1.21 MB'
      >>> humanize_bytes(1024*1234*1111, precision=2)
      '1.31 GB'
      >>> humanize_bytes(1024*1234*1111)
      '1.3 GB'
      >>> humanize_bytes(1024, True)
      1024
      """
      if raw:
          return bytes
      abbrevs = (
          (1 << 50, "PB"),
          (1 << 40, "TB"),
          (1 << 30, "GB"),
          (1 << 20, "MB"),
          (1 << 10, "kB"),
          (1, "bytes")
      )
      if bytes == 1:
          return "1 byte"
      for factor, suffix in abbrevs:  # pragma: no cover
          if bytes >= factor:
              break
      return "%.*f %s" % (precision, bytes / factor, suffix)