code: def create_uml_graph(
      mappers,
      show_operations=True,
      show_attributes=True,
      show_inherited=True,
      show_multiplicity_one=False,
      show_datatypes=True,
      linewidth=1.0,
      font="Bitstream-Vera Sans",
  ):
      graph = pydot.Dot(
          prog="neato",
          mode="major",
          overlap="0",
          sep="0.01",
          dim="3",
          pack="True",
          ratio=".75",
      )
      relations = set()
      for mapper in mappers:
          graph.add_node(
              pydot.Node(
                  escape(mapper.class_.__name__),
                  shape="plaintext",
                  label=_mk_label(
                      mapper,
                      show_operations,
                      show_attributes,
                      show_datatypes,
                      show_inherited,
                      linewidth,
                  ),
                  fontname=font,
                  fontsize="8.0",
              )
          )
          if mapper.inherits:
              graph.add_edge(
                  pydot.Edge(
                      escape(mapper.inherits.class_.__name__),
                      escape(mapper.class_.__name__),
                      arrowhead="none",
                      arrowtail="empty",
                      style="setlinewidth(%s)" % linewidth,
                      arrowsize=str(linewidth),
                  )
              )
          for loader in mapper.iterate_properties:
              if (
                  isinstance(loader, RelationshipProperty)
                  and loader.mapper in mappers
              ):
                  if hasattr(loader, "reverse_property"):
                      relations.add(
                          frozenset([loader, loader.reverse_property])
                      )
                  else:
                      relations.add(frozenset([loader]))
  
      for relation in relations:
          # if len(loaders) > 2:
          #    raise Exception("Warning: too many loaders for join %s" % join)
          args = {}
  
          def multiplicity_indicator(prop):
              if prop.uselist:
                  return " *"
              if hasattr(prop, "local_side"):
                  cols = prop.local_side
              else:
                  cols = prop.local_columns
              if any(col.nullable for col in cols):
                  return " 0..1"
              if show_multiplicity_one:
                  return " 1"
              return ""
  
          if len(relation) == 2:
              src, dest = relation
              from_name = escape(src.parent.class_.__name__)
              to_name = escape(dest.parent.class_.__name__)
  
              def calc_label(src, dest):
                  return "+" + src.key + multiplicity_indicator(src)
  
              args["headlabel"] = calc_label(src, dest)
  
              args["taillabel"] = calc_label(dest, src)
              args["arrowtail"] = "none"
              args["arrowhead"] = "none"
              args["constraint"] = False
          else:
              (prop,) = relation
              from_name = escape(prop.parent.class_.__name__)
              to_name = escape(prop.mapper.class_.__name__)
              args["headlabel"] = "+%s%s" % (
                  prop.key,
                  multiplicity_indicator(prop),
              )
              args["arrowtail"] = "none"
              args["arrowhead"] = "vee"
  
          graph.add_edge(
              pydot.Edge(
                  from_name,
                  to_name,
                  fontname=font,
                  fontsize="7.0",
                  style="setlinewidth(%s)" % linewidth,
                  arrowsize=str(linewidth),
                  **args,
              )
          )
  
      return graph
  
file_path: evadb/script/docs/catalog_plotter.py
imports: from evadb.catalog.catalog_manager import CatalogManager
  from evadb.configuration.configuration_manager import ConfigurationManager
  from sqlalchemy.orm.properties import RelationshipProperty
  import pydot
  import types
  from sqlalchemy.dialects.postgresql.base import PGDialect
  from sqlalchemy import MetaData, Table, text, ForeignKeyConstraint
label_desc: Use image node_id 3 for calling a global function with example usage: create_uml_graph(mappers, show_operations, show_attributes, show_inherited, show_multiplicity_one, show_datatypes, linewidth, font) and returns: graph, str, str, str, str, unknown