class_docstr: Implements methods for finding optimal (efficient) backdoor sets.
class_docstr_tok: ["Implements","methods","for","finding","optimal","(","efficient",")","backdoor","sets","."]
docstr: Method to compute the proper back-door graph associated with
   treatment and outcome.
  
  :param G: nx.DiGraph
      A directed acyclic graph.
  :returns Gbd: nx.DiGraph
      The proper backdoor graph of G.
docstr_tok: ["Method","to","compute","the","proper","back-door","graph","associated","with","treatment","and","outcome",".",":","param","G",":","nx.DiGraph","A","directed","acyclic","graph",".",":","returns","Gbd",":","nx.DiGraph","The","proper","backdoor","graph","of","G","."]
code: def backdoor_graph(self, G):
      """Method to compute the proper back-door graph associated with
       treatment and outcome.
  
      :param G: nx.DiGraph
          A directed acyclic graph.
      :returns Gbd: nx.DiGraph
          The proper backdoor graph of G.
      """
      Gbd = G.copy()
  
      for path in nx.all_simple_edge_paths(
          G, self.treatment_name, self.outcome_name
      ):
          first_edge = path[0]
          Gbd.remove_edge(first_edge[0], first_edge[1])
  
      return Gbd
  
file_path: dowhy/dowhy/causal_identifier/efficient_backdoor.py
imports: from typing import List
  import networkx
  import numpy
label_desc: Use image node_id 3 for calling the EfficientBackdoor obj's underlying member method code with example usage: obj.backdoor_graph(G) and returns: Gbd