code: def deduplicate(values, column_names=False, separator="_"):
      """
      Append a unique identifer to duplicate strings in a given sequence of
      strings. Identifers are an underscore followed by the occurance number of
      the specific string.
  
      ['abc', 'abc', 'cde', 'abc'] -> ['abc', 'abc_2', 'cde', 'abc_3']
  
      :param column_names:
          If True, values are treated as column names. Warnings will be thrown
          if column names are None or duplicates. None values will be replaced with
          letter indices.
      """
      final_values = []
  
      for i, value in enumerate(values):
          if column_names:
              if not value:
                  new_value = letter_name(i)
                  warn_unnamed_column(i, new_value)
              elif isinstance(value, str):
                  new_value = value
              else:
                  raise ValueError(
                      "Column names must be strings or None."
                  )
          else:
              new_value = value
  
          final_value = new_value
          duplicates = 0
  
          while final_value in final_values:
              final_value = new_value + separator + str(duplicates + 2)
              duplicates += 1
  
          if column_names and duplicates > 0:
              warn_duplicate_column(new_value, final_value)
  
          final_values.append(final_value)
  
      return tuple(final_values)
  
imports: import math
  import string
  from collections import OrderedDict
  from collections.abc import Sequence
  from decimal import ROUND_CEILING, ROUND_FLOOR, Decimal, getcontext
  from functools import wraps
  from slugify import slugify
  from agate import config
  from agate.warns import warn_duplicate_column, warn_unnamed_column
label_desc: Use image node_id 9 for calling a global function with example usage: deduplicate(values, column_names, separator) and returns: tuple