class_docstr: Main class for storing the causal model state.
docstr: Do operator for estimating values of the outcome after intervening on treatment.
  
  :param x: interventional value of the treatment variable
  :param identified_estimand: a probability expression
      that represents the effect to be estimated. Output of
      CausalModel.identify_effect method
  :param method_name: any of the estimation method to be used. See docs
      for estimate_effect method for a list of supported estimation methods.
  :param fit_estimator: Boolean flag on whether to fit the estimator.
      Setting it to False is useful to compute the do-operation on new
      data using a previously fitted estimator.
  :param method_params: Dictionary containing any method-specific parameters. These are passed directly to the estimating method.
  
  :returns: an instance of the CausalEstimate class, containing the causal effect estimate
      and other method-dependent information
docstr_tok: ["Do","operator","for","estimating","values","of","the","outcome","after","intervening","on","treatment",".",":","param","x",":","interventional","value","of","the","treatment","variable",":","param","identified_estimand",":","a","probability","expression","that","represents","the","effect","to","be","estimated",".","Output","of","CausalModel.identify_effect","method",":","param","method_name",":","any","of","the","estimation","method","to","be","used",".","See","docs","for","estimate_effect","method","for","a","list","of","supported","estimation","methods",".",":","param","fit_estimator",":","Boolean","flag","on","whether","to","fit","the","estimator",".","Setting","it","to","False","is","useful","to","compute","the","do-operation","on","new","data","using","a","previously","fitted","estimator",".",":","param","method_params",":","Dictionary","containing","any","method-specific","parameters",".","These","are","passed","directly","to","the","estimating","method",".",":","returns",":","an","instance","of","the","CausalEstimate","class",",","containing","the","causal","effect","estimate","and","other","method-dependent","information"]
code: def do(
      self,
      x,
      identified_estimand,
      method_name=None,
      fit_estimator=True,
      method_params=None,
  ):
      """Do operator for estimating values of the outcome after intervening on treatment.
  
      :param x: interventional value of the treatment variable
      :param identified_estimand: a probability expression
          that represents the effect to be estimated. Output of
          CausalModel.identify_effect method
      :param method_name: any of the estimation method to be used. See docs
          for estimate_effect method for a list of supported estimation methods.
      :param fit_estimator: Boolean flag on whether to fit the estimator.
          Setting it to False is useful to compute the do-operation on new
          data using a previously fitted estimator.
      :param method_params: Dictionary containing any method-specific parameters. These are passed directly to the estimating method.
  
      :returns: an instance of the CausalEstimate class, containing the causal effect estimate
          and other method-dependent information
  
      """
      if method_name is None:
          pass
      else:
          str_arr = method_name.split(".", maxsplit=1)
          identifier_name = str_arr[0]
          estimator_name = str_arr[1]
          identified_estimand.set_identifier_method(identifier_name)
          causal_estimator_class = causal_estimators.get_class_object(
              estimator_name + "_estimator"
          )
  
      # Check if estimator's target estimand is identified
      if identified_estimand.estimands[identifier_name] is None:
          self.logger.warning(
              "No valid identified estimand for using instrumental variables method"
          )
          estimate = CausalEstimate(None, None, None, None, None, None)
      else:
          if fit_estimator:
              # Note that while the name of the variable is the same,
              # "self.causal_estimator", this estimator takes in less
              # parameters than the same from the
              # estimate_effect code. It is not advisable to use the
              # estimator from this function to call estimate_effect
              # with fit_estimator=False.
              self.causal_estimator = causal_estimator_class(
                  identified_estimand,
                  **method_params,
              )
              self.causal_estimator.fit(
                  self._data,
                  self._treatment,
                  self._outcome,
              )
          else:
              # Estimator had been computed in a previous call
              assert self.causal_estimator is not None
          try:
              estimate = self.causal_estimator.do(x)
          except NotImplementedError:
              self.logger.error(
                  "Do Operation not implemented or not supported for this estimator."
              )
              raise NotImplementedError
      return estimate
  
imports: import logging
  import typing
  import warnings
  from itertools import combinations
  from sympy import init_printing
  import dowhy.causal_estimators
  import dowhy.causal_refuters
  import dowhy.graph_learners
  from dowhy.causal_estimator import CausalEstimate, estimate_effect
  from dowhy.causal_graph import CausalGraph
  from dowhy.causal_identifier import AutoIdentifier, BackdoorAdjustment, IDIdentifier
  from dowhy.causal_identifier.identify_effect import EstimandType
  from dowhy.causal_refuters.graph_refuter import GraphRefuter
  from dowhy.utils.api import parse_state
label_desc: Use image node_id 10 for calling the CausalModel obj's underlying member method code with example usage: obj.do(x, identified_estimand, method_name, fit_estimator, method_params) and returns: estimate