code: def generate_blastn_commands(filenames, outdir, blast_exe=None, mode="ANIb"):
      
      if mode == "ANIb":
          construct_blast_cmdline = construct_blastn_cmdline
      else:
          construct_blast_cmdline = construct_blastall_cmdline
      cmdlines = []
      for idx, fname1 in enumerate(filenames[:-1]):
          dbname1 = fname1.replace("-fragments", "")
          for fname2 in filenames[idx + 1 :]:
              dbname2 = fname2.replace("-fragments", "")
              if blast_exe is None:
                  cmdlines.append(construct_blast_cmdline(fname1, dbname2, outdir))
                  cmdlines.append(construct_blast_cmdline(fname2, dbname1, outdir))
              else:
                  cmdlines.append(
                      construct_blast_cmdline(fname1, dbname2, outdir, blast_exe)
                  )
                  cmdlines.append(
                      construct_blast_cmdline(fname2, dbname1, outdir, blast_exe)
                  )
      return cmdlines
docs: Return a list of blastn command-lines for ANIm
  
      - filenames - a list of paths to fragmented input FASTA files
      - outdir - path to output directory
      - blastn_exe - path to BLASTN executable
  
      Assumes that the fragment sequence input filenames have the form
      ACCESSION-fragments.ext, where the corresponding BLAST database filenames
      have the form ACCESSION.ext. This is the convention followed by the
      fragment_FASTA_files() function above.