class_docstr: Implements methods for finding optimal (efficient) backdoor sets.
class_docstr_tok: ["Implements","methods","for","finding","optimal","(","efficient",")","backdoor","sets","."]
docstr: Returns the optimal minimal adjustment set with respect to treatment,
  outcome, conditional and observable variables.
  
  :returns: optimal_minimal: set
      The optimal minimal adjustment set.
docstr_tok: ["Returns","the","optimal","minimal","adjustment","set","with","respect","to","treatment",",","outcome",",","conditional","and","observable","variables",".",":","returns",":","optimal_minimal",":","set","The","optimal","minimal","adjustment","set","."]
code: def optimal_minimal_adj_set(self):
      """Returns the optimal minimal adjustment set with respect to treatment,
      outcome, conditional and observable variables.
  
      :returns: optimal_minimal: set
          The optimal minimal adjustment set.
      """
  
      H1 = self.build_H1()
  
      if self.treatment_name in H1.neighbors(self.outcome_name):
          raise ValueError(EXCEPTION_NO_ADJ)
      else:
          optimal_minimal = self.unblocked(
              H1, nx.node_boundary(H1, [self.outcome_name])
          )
          return optimal_minimal
  
file_path: dowhy/dowhy/causal_identifier/efficient_backdoor.py
imports: from typing import List
  import networkx
  import numpy
label_desc: Use image node_id 14 for calling the EfficientBackdoor obj's underlying member method code with example usage: obj.optimal_minimal_adj_set() and returns: optimal_minimal