class_docstr: General-purpose dependency graph.
  
  Essentially a directed acyclic graph.
  Usually used to find an evaluation order for e.g. variable substitution
  The relation that an edge between A and B represents is:
  "A depends on B, i.e. B should be evaluated before A"
  
  Nodes can be added explicitly or they can be created implicitly
  while adding edges.
  Nodes have keys, which should be some hashable value that identifies
  the elements the graph represents in your use case. E.G. they can just
  be the variable name you want to substitute.
  However, if needed, more generally you can attach any data to a node
  (e.g. a path in your tree), and if so desired, a unique key can be
  created for you. You'll only need to know that key while adding edges
  to/from it.
  Implicit keys and explicit keys can also be mixed.
docstr: Checks if an evaluation order can be found.
  
  A dependency graph is evaluatable if there are no circular
  dependencies, i.e., the graph is acyclic.
  
  Returns
  -------
  bool
      Indicating if the graph is evaluatable.
docstr_tok: ["Checks","if","an","evaluation","order","can","be","found",".","A","dependency","graph","is","evaluatable","if","there","are","no","circular","dependencies",",","i.e.",",","the","graph","is","acyclic",".","Returns","--","--","--","-","bool","Indicating","if","the","graph","is","evaluatable","."]
code: def is_valid(self):
      """Checks if an evaluation order can be found.
  
      A dependency graph is evaluatable if there are no circular
      dependencies, i.e., the graph is acyclic.
  
      Returns
      -------
      bool
          Indicating if the graph is evaluatable.
      """
      return not self._find_first_cycle()
  
file_path: speechbrain/speechbrain/utils/depgraph.py
imports: import collections
  import uuid
label_desc: Use image node_id 6 for calling the DependencyGraph obj's underlying member method code with example usage: obj.is_valid() and returns: unknown