code: def backup(fn):
      
      if not os.path.exists(fn):
          return
  
      backnum = 1
      backfmt = "{fn}.bak.{backnum}"
      trial_fn = backfmt.format(fn=fn, backnum=backnum)
      while os.path.exists(trial_fn):
          backnum += 1
          trial_fn = backfmt.format(fn=fn, backnum=backnum)
  
      warnings.warn("{fn} exists. Moving it to {newfn}"
                    .format(fn=fn, newfn=trial_fn),
                    BackupWarning)
      shutil.move(fn, trial_fn)
docs: If ``fn`` exists, rename it and issue a warning
  
      This function will rename an existing filename {fn}.bak.{i} where
      i is the smallest integer that gives a filename that doesn't exist.
      This naively uses a while loop to find such a filename, so there
      shouldn't be too many existing backups or performance will degrade.
  
      Parameters
      ----------
      fn : str
          The filename to check.