docs: def _file_stats(file_path, enforce_fastx=True):
      """Return information about the file path (or paths, if paired), prior to upload.
  
      Parameters
      ----------
      file_path : `string` or `tuple`
          System path to the file(s) to be uploaded
  
      Returns
      -------
      `string`
          Filename, minus compressed extension (.gz or .bz2). If paired, use first path to generate
          the filename that will be used to represent both paths in the pair.
      `integer`
          If paired, the uncompressed file size of both files in the path. If single, the raw file
          size whether compressed or not. Pairs are always uploaded uncompressed, whereas single files
          are uploaded in whatever format they're in. One Codex will uncompress and re-compress as
          appropriate.
      {'fasta', 'fastq'}
          The format of the file being uploaded, guessed only by its extension. If paired, this
          determines how many lines to pull from each file during interleaving.
      """
      if isinstance(file_path, tuple):
          assert len(file_path) == 2
          file_size = sum(_file_size(f, uncompressed=True) for f in file_path)
          file_path = interleaved_filename(file_path)
          paired = True
      else:
          file_size = _file_size(file_path, uncompressed=False)
          paired = False
  
      new_filename, ext = os.path.splitext(os.path.basename(file_path))
  
      if ext in {".gz", ".gzip", ".bz", ".bz2", ".bzip"}:
          compressed = ext
          new_filename, ext = os.path.splitext(new_filename)
      else:
          compressed = ""
  
      # strip compressed extension if paired-end, since we're going to upload uncompressed
      if paired and compressed:
          final_filename = new_filename + ext
      else:
          final_filename = new_filename + ext + compressed
  
      if enforce_fastx:
          if ext in {".fa", ".fna", ".fasta"}:
              file_format = "fasta"
          elif ext in {".fq", ".fastq"}:
              file_format = "fastq"
          else:
              raise UploadException(
                  "{}: extension must be one of .fa, .fna, .fasta, .fq, .fastq".format(final_filename)
              )
      else:
          file_format = None
  
      if file_size == 0:
          raise UploadException("{}: empty files can not be uploaded".format(final_filename))
  
      return final_filename, file_size, file_format