docs: def run_bidirectional_blast(reference, other_genome, dbtype, outdir=''):
      """BLAST a genome against another, and vice versa.
  
      This function requires BLAST to be installed, do so by running:
      sudo apt install ncbi-blast+
  
      Args:
          reference (str): path to "reference" genome, aka your "base strain"
          other_genome (str): path to other genome which will be BLASTed to the reference
          dbtype (str): "nucl" or "prot" - what format your genome files are in
          outdir (str): path to folder where BLAST outputs should be placed
  
      Returns:
          Paths to BLAST output files.
          (reference_vs_othergenome.out, othergenome_vs_reference.out)
  
      """
      # TODO: add force_rerun option
  
      if dbtype == 'nucl':
          command = 'blastn'
      elif dbtype == 'prot':
          command = 'blastp'
      else:
          raise ValueError('dbtype must be "nucl" or "prot"')
  
      r_folder, r_name, r_ext = utils.split_folder_and_path(reference)
      g_folder, g_name, g_ext = utils.split_folder_and_path(other_genome)
  
      # make sure BLAST DBs have been made
      run_makeblastdb(infile=reference, dbtype=dbtype, outdir=r_folder)
      run_makeblastdb(infile=other_genome, dbtype=dbtype, outdir=g_folder)
  
      # Reference vs genome
      r_vs_g = r_name + '_vs_' + g_name + '_blast.out'
      r_vs_g = op.join(outdir, r_vs_g)
      if op.exists(r_vs_g) and os.stat(r_vs_g).st_size != 0:
          log.debug('{} vs {} BLAST already run'.format(r_name, g_name))
      else:
          cmd = '{} -query {} -db {} -outfmt 6 -out {}'.format(command, reference, op.join(g_folder, g_name), r_vs_g)
          log.debug('Running: {}'.format(cmd))
          retval = subprocess.call(cmd, shell=True)
          if retval == 0:
              log.debug('BLASTed {} vs {}'.format(g_name, r_name))
          else:
              log.error('Error running {}, exit code {}'.format(command, retval))
  
      # Genome vs reference
      g_vs_r = g_name + '_vs_' + r_name + '_blast.out'
      g_vs_r = op.join(outdir, g_vs_r)
      if op.exists(g_vs_r) and os.stat(g_vs_r).st_size != 0:
          log.debug('{} vs {} BLAST already run'.format(g_name, r_name))
      else:
          cmd = '{} -query {} -db {} -outfmt 6 -out {}'.format(command, other_genome, op.join(r_folder, r_name), g_vs_r)
          log.debug('Running: {}'.format(cmd))
          retval = subprocess.call(cmd, shell=True)
          if retval == 0:
              log.debug('BLASTed {} vs {}'.format(g_name, r_name))
          else:
              log.error('Error running {}, exit code {}'.format(command, retval))
  
      return r_vs_g, g_vs_r