docs: def estimate(self):
          """
          Estimates the `DAG` structure that fits best to the given data set,
          according to the scoring method supplied in the constructor.
          Exhaustively searches through all models. Only estimates network structure, no parametrization.
  
          Returns
          -------
          model: `DAG` instance
              A `DAG` with maximal score.
  
          Examples
          --------
          >>> import pandas as pd
          >>> import numpy as np
          >>> from pgmpy.estimators import ExhaustiveSearch
          >>> # create random data sample with 3 variables, where B and C are identical:
          >>> data = pd.DataFrame(np.random.randint(0, 5, size=(5000, 2)), columns=list('AB'))
          >>> data['C'] = data['B']
          >>> est = ExhaustiveSearch(data)
          >>> best_model = est.estimate()
          >>> best_model
          <pgmpy.base.DAG.DAG object at 0x7f695c535470>
          >>> best_model.edges()
          [('B', 'C')]
          """
  
          best_dag = max(self.all_dags(), key=self.scoring_method.score)
  
          best_model = DAG()
          best_model.add_nodes_from(sorted(best_dag.nodes()))
          best_model.add_edges_from(sorted(best_dag.edges()))
          return best_model