class_docstr: Class that implements different identification methods.
  
  Currently supports backdoor and instrumental variable identification methods. The identification is based on the causal graph provided.
  
  This class is for backwards compatibility with CausalModel
  Will be deprecated in the future in favor of function call auto_identify_effect()
code: def identify_effect(
      self,
      graph: nx.DiGraph,
      action_nodes: Union[str, List[str]],
      outcome_nodes: Union[str, List[str]],
      observed_nodes: Union[str, List[str]],
      conditional_node_names: List[str] = None,
  ):
      estimand = identify_effect_auto(
          graph,
          action_nodes,
          outcome_nodes,
          observed_nodes,
          self.estimand_type,
          conditional_node_names,
          self.backdoor_adjustment,
          self.optimize_backdoor,
          self.costs,
      )
  
      estimand.identifier = self
  
      return estimand
  
imports: import itertools
  import logging
  from enum import Enum
  from typing import Dict, List, Optional, Union
  import networkx
  import sympy
  import sympy.stats
  from dowhy.causal_identifier.efficient_backdoor import EfficientBackdoor
  from dowhy.causal_identifier.identified_estimand import IdentifiedEstimand
  from dowhy.graph import check_dseparation, check_valid_backdoor_set, check_valid_frontdoor_set, check_valid_mediation_set, do_surgery, get_all_directed_paths, get_backdoor_paths, get_descendants, get_instruments, has_directed_path
  from dowhy.utils.api import parse_state
label_desc: Use image node_id 2 for calling the AutoIdentifier obj's underlying member method code with example usage: obj.identify_effect(graph, action_nodes, outcome_nodes, observed_nodes, conditional_node_names) and returns: estimand