code: def _separators(strings, linewidth):
      
      if len(strings) <= 1:
          return ()
  
      indent_len = 4
      separators = []
      cur_line_len = indent_len + len(strings[0]) + 1
      if cur_line_len + 2 <= linewidth and '\n' not in strings[0]:
          # Next string might fit on same line
          separators.append(', ')
          cur_line_len += 1  # for the extra space
      else:
          # Use linebreak if string contains newline or doesn't fit
          separators.append(',\n')
          cur_line_len = indent_len
  
      for i, s in enumerate(strings[1:-1]):
          cur_line_len += len(s) + 1
  
          if '\n' in s:
              # Use linebreak before and after if string contains newline
              separators[i] = ',\n'
              cur_line_len = indent_len
              separators.append(',\n')
  
          elif cur_line_len + 2 <= linewidth:
              # This string fits, next one might also fit on same line
              separators.append(', ')
              cur_line_len += 1  # for the extra space
  
          elif cur_line_len <= linewidth:
              # This string fits, but next one won't
              separators.append(',\n')
              cur_line_len = indent_len
  
          else:
              # This string doesn't fit but has no newlines in it
              separators[i] = ',\n'
              cur_line_len = indent_len + len(s) + 1
  
              # Need to determine again what should come next
              if cur_line_len + 2 <= linewidth:
                  # Next string might fit on same line
                  separators.append(', ')
              else:
                  separators.append(',\n')
  
      cur_line_len += len(strings[-1])
      if cur_line_len + 1 > linewidth or '\n' in strings[-1]:
          # This string and a comma don't fit on this line
          separators[-1] = ',\n'
  
      return tuple(separators)
docs: Return separators that keep joined strings within the line width.