docs: def write_pbm(matrix, version, out, scale=1, border=None, plain=False):
      """\
      Serializes the matrix as `PBM <http://netpbm.sourceforge.net/doc/pbm.html>`_
      image.
  
      :param matrix: The matrix to serialize.
      :param int version: The (Micro) QR code version
      :param out: Filename or a file-like object supporting to write binary data.
      :param scale: Indicates the size of a single module (default: 1 which
              corresponds to 1 x 1 pixel per module).
      :param int border: Integer indicating the size of the quiet zone.
              If set to ``None`` (default), the recommended border size
              will be used (``4`` for QR Codes, ``2`` for a Micro QR Codes).
      :param bool plain: Indicates if a P1 (ASCII encoding) image should be
              created (default: False). By default a (binary) P4 image is created.
      """
      row_iter = matrix_iter(matrix, version, scale, border)
      width, height = get_symbol_size(version, scale=scale, border=border)
      with writable(out, 'wb') as f:
          write = f.write
          write('{0}\n'
                '# Created by {1}\n'
                '{2} {3}\n'\
                .format(('P4' if not plain else 'P1'), CREATOR, width, height).encode('ascii'))
          if not plain:
              for row in row_iter:
                  write(bytearray(_pack_bits_into_byte(row)))
          else:
              for row in row_iter:
                  write(b''.join(str(i).encode('ascii') for i in row))
                  write(b'\n')