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: Generator which yields the names of all dataframes connected through forward
  relationships, and the path taken to each. A dataframe will be yielded
  multiple times if there are multiple paths to it.
  
  Implemented using depth first search.
docstr_tok: ["Generator","which","yields","the","names","of","all","dataframes","connected","through","forward","relationships",",","and","the","path","taken","to","each",".","A","dataframe","will","be","yielded","multiple","times","if","there","are","multiple","paths","to","it",".","Implemented","using","depth","first","search","."]
code: def _forward_dataframe_paths(
      self, start_dataframe_name, seen_dataframes=None
  ):
      """
      Generator which yields the names of all dataframes connected through forward
      relationships, and the path taken to each. A dataframe will be yielded
      multiple times if there are multiple paths to it.
  
      Implemented using depth first search.
      """
      if seen_dataframes is None:
          seen_dataframes = set()
  
      if start_dataframe_name in seen_dataframes:
          return
  
      seen_dataframes.add(start_dataframe_name)
  
      yield start_dataframe_name, []
  
      for relationship in self.get_forward_relationships(
          start_dataframe_name
      ):
          next_dataframe = relationship._parent_dataframe_name
          # Copy seen dataframes for each next node to allow multiple paths (but
          # not cycles).
          descendants = self._forward_dataframe_paths(
              next_dataframe,
              seen_dataframes.copy(),
          )
          for sub_dataframe_name, sub_path in descendants:
              yield sub_dataframe_name, [relationship] + sub_path
  
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 23 for calling the EntitySet obj's underlying member method code with example usage: obj._forward_dataframe_paths(start_dataframe_name, seen_dataframes) without return types