code: def wrap_custom(
      source_text, separator_chars, width=70, keep_separators=True
  ):
      current_length = 0
      latest_separator = -1
      current_chunk_start = 0
      output = ""
      char_index = 0
      while char_index < len(source_text):
          if source_text[char_index] in separator_chars:
              latest_separator = char_index
          output += source_text[char_index]
          current_length += 1
          if current_length == width:
              if latest_separator >= current_chunk_start:
                  # Valid earlier separator, cut there
                  cutting_length = char_index - latest_separator
                  if not keep_separators:
                      cutting_length += 1
                  if cutting_length:
                      output = output[:-cutting_length]
                  output += "\n"
                  current_chunk_start = latest_separator + 1
                  char_index = current_chunk_start
              else:
                  # No separator found, hard cut
                  output += "\n"
                  current_chunk_start = char_index + 1
                  latest_separator = current_chunk_start - 1
                  char_index += 1
              current_length = 0
          else:
              char_index += 1
      return output
  
file_path: sweetviz/sweetviz/graph_associations.py
imports: import math
  import numpy
  import pandas
  import matplotlib.pyplot
  from sweetviz.sv_types import FeatureType
  import sweetviz.graph
  from sweetviz.config import config
  import itertools
  import matplotlib.patches
  from textwrap import wrap
label_desc: Use image node_id 1 for calling a global function with example usage: wrap_custom(source_text, separator_chars, width, keep_separators) and returns: output