docs: def all_dags(self, nodes=None):
          """
          Computes all possible directed acyclic graphs with a given set of nodes,
          sparse ones first. `2**(n*(n-1))` graphs need to be searched, given `n` nodes,
          so this is likely not feasible for n>6. This is a generator.
  
          Parameters
          ----------
          nodes: list of nodes for the DAGs (optional)
              A list of the node names that the generated DAGs should have.
              If not provided, nodes are taken from data.
  
          Returns
          -------
          dags: Generator object for nx.DiGraphs
              Generator that yields all acyclic nx.DiGraphs, ordered by number of edges. Empty DAG first.
  
          Examples
          --------
          >>> import pandas as pd
          >>> from pgmpy.estimators import ExhaustiveSearch
          >>> s = ExhaustiveSearch(pd.DataFrame(data={'Temperature': [23, 19],
                                                      'Weather': ['sunny', 'cloudy'],
                                                      'Humidity': [65, 75]}))
          >>> list(s.all_dags())
          [<networkx.classes.digraph.DiGraph object at 0x7f6955216438>,
           <networkx.classes.digraph.DiGraph object at 0x7f6955216518>,
          ....
          >>> [dag.edges() for dag in s.all_dags()]
          [[], [('Humidity', 'Temperature')], [('Humidity', 'Weather')],
          [('Temperature', 'Weather')], [('Temperature', 'Humidity')],
          ....
          [('Weather', 'Humidity'), ('Weather', 'Temperature'), ('Temperature', 'Humidity')]]
  
          """
          if nodes is None:
              nodes = sorted(self.state_names.keys())
          if len(nodes) > 6:
              warn("Generating all DAGs of n nodes likely not feasible for n>6!")
              warn("Attempting to search through {0} graphs".format(2**(len(nodes)*(len(nodes)-1))))
  
          edges = list(combinations(nodes, 2))  # n*(n-1) possible directed edges
          edges.extend([(y, x) for x, y in edges])
          all_graphs = powerset(edges)  # 2^(n*(n-1)) graphs
  
          for graph_edges in all_graphs:
              graph = nx.DiGraph()
              graph.add_nodes_from(nodes)
              graph.add_edges_from(graph_edges)
              if nx.is_directed_acyclic_graph(graph):
                  yield graph