class_docstr: Stores all actual data and typing information for an entityset
  
  Attributes:
      id
      dataframe_dict
      relationships
      time_type
  
  Properties:
      metadata
class_docstr_tok: ["Stores","all","actual","data","and","typing","information","for","an","entityset","Attributes",":","id","dataframe_dict","relationships","time_type","Properties",":","metadata"]
docstr: Create a UML diagram-ish graph of the EntitySet.
  
  Args:
      to_file (str, optional) : Path to where the plot should be saved.
          If set to None (as by default), the plot will not be saved.
  
  Returns:
      graphviz.Digraph : Graph object that can directly be displayed in
          Jupyter notebooks. Nodes of the graph correspond to the DataFrames
          in the EntitySet, showing the typing information for each column.
  
  Note:
      The typing information displayed for each column is based off of the Woodwork
      ColumnSchema for that column and is represented as ``LogicalType; semantic_tags``,
      but the standard semantic tags have been removed for brevity.
docstr_tok: ["Create","a","UML","diagram-ish","graph","of","the","EntitySet",".","Args",":","to_file","(","str",",","optional",")",":","Path","to","where","the","plot","should","be","saved",".","If","set","to","None","(","as","by","default",")",",","the","plot","will","not","be","saved",".","Returns",":","graphviz.Digraph",":","Graph","object","that","can","directly","be","displayed","in","Jupyter","notebooks",".","Nodes","of","the","graph","correspond","to","the","DataFrames","in","the","EntitySet",",","showing","the","typing","information","for","each","column",".","Note",":","The","typing","information","displayed","for","each","column","is","based","off","of","the","Woodwork","ColumnSchema","for","that","column","and","is","represented","as","``","LogicalType",";","semantic_tags","``",",","but","the","standard","semantic","tags","have","been","removed","for","brevity","."]
code: def plot(self, to_file=None):
      """
      Create a UML diagram-ish graph of the EntitySet.
  
      Args:
          to_file (str, optional) : Path to where the plot should be saved.
              If set to None (as by default), the plot will not be saved.
  
      Returns:
          graphviz.Digraph : Graph object that can directly be displayed in
              Jupyter notebooks. Nodes of the graph correspond to the DataFrames
              in the EntitySet, showing the typing information for each column.
  
      Note:
          The typing information displayed for each column is based off of the Woodwork
          ColumnSchema for that column and is represented as ``LogicalType; semantic_tags``,
          but the standard semantic tags have been removed for brevity.
      """
      graphviz = check_graphviz()
      format_ = get_graphviz_format(graphviz=graphviz, to_file=to_file)
  
      # Initialize a new directed graph
      graph = graphviz.Digraph(
          self.id,
          format=format_,
          graph_attr={"splines": "ortho"},
      )
  
      # Draw dataframes
      for df in self.dataframes:
          column_typing_info = []
          for col_name, col_schema in df.ww.columns.items():
              col_string = (
                  col_name + " : " + str(col_schema.logical_type)
              )
  
              tags = (
                  col_schema.semantic_tags
                  - col_schema.logical_type.standard_tags
              )
              if tags:
                  col_string += "; "
                  col_string += ", ".join(tags)
              column_typing_info.append(col_string)
  
          columns_string = "\l".join(column_typing_info)  # noqa: W605
          if is_instance(
              df, dd, "DataFrame"
          ):  # dataframe is a dask dataframe
              label = "{%s |%s\l}" % (
                  df.ww.name,
                  columns_string,
              )  # noqa: W605
          else:
              nrows = df.shape[0]
              label = "{%s (%d row%s)|%s\l}" % (  # noqa: W605
                  df.ww.name,
                  nrows,
                  "s" * (nrows > 1),
                  columns_string,
              )
          graph.node(df.ww.name, shape="record", label=label)
  
      # Draw relationships
      for rel in self.relationships:
          # Display the key only once if is the same for both related dataframes
          if rel._parent_column_name == rel._child_column_name:
              label = rel._parent_column_name
          else:
              label = "%s -> %s" % (
                  rel._parent_column_name,
                  rel._child_column_name,
              )
  
          graph.edge(
              rel._child_dataframe_name,
              rel._parent_dataframe_name,
              xlabel=label,
          )
  
      if to_file:
          save_graph(graph, to_file, format_)
      return graph
  
imports: import copy
  import logging
  import warnings
  from collections import defaultdict
  import numpy
  import pandas
  from woodwork import init_series
  from woodwork.logical_types import Datetime, LatLong
  from featuretools.entityset import deserialize, serialize
  from featuretools.entityset.relationship import Relationship, RelationshipPath
  from featuretools.feature_base.feature_base import _ES_REF
  from featuretools.utils.gen_utils import Library, import_or_none, is_instance
  from featuretools.utils.plot_utils import check_graphviz, get_graphviz_format, save_graph
  from featuretools.utils.wrangle import _check_timedelta
label_desc: Use image node_id 37 for calling the EntitySet obj's underlying member method code with example usage: obj.plot(to_file) and returns: graph