class_docstr: Wrapper class for estimators from the EconML library.
  
  Supports additional parameters as listed below. For init and fit
  parameters of each estimator, refer to the EconML docs.
docstr: data: dataframe containing the data on which treatment effect is to be estimated.
  treatment_value: value of the treatment variable for which the effect is to be estimated. It can be (optionally) a sequence for different values of the treatment variable.
  control_value: value of the treatment variable that denotes its absence (usually 0)
  target_units: The units for which the treatment effect should be estimated.
               It can be a DataFrame that contains values of the effect_modifiers and effect will be estimated only for this new data.
               It can also be a lambda function that can be used as an index for the data (pandas DataFrame) to select the required rows.
docstr_tok: ["data",":","dataframe","containing","the","data","on","which","treatment","effect","is","to","be","estimated",".","treatment_value",":","value","of","the","treatment","variable","for","which","the","effect","is","to","be","estimated",".","It","can","be","(","optionally",")","a","sequence","for","different","values","of","the","treatment","variable",".","control_value",":","value","of","the","treatment","variable","that","denotes","its","absence","(","usually","0",")","target_units",":","The","units","for","which","the","treatment","effect","should","be","estimated",".","It","can","be","a","DataFrame","that","contains","values","of","the","effect_modifiers","and","effect","will","be","estimated","only","for","this","new","data",".","It","can","also","be","a","lambda","function","that","can","be","used","as","an","index","for","the","data","(","pandas","DataFrame",")","to","select","the","required","rows","."]
code: def estimate_effect(
      self,
      data: pd.DataFrame,
      treatment_value: Any = 1,
      control_value: Any = 0,
      target_units=None,
      **_,
  ):
      """
      data: dataframe containing the data on which treatment effect is to be estimated.
      treatment_value: value of the treatment variable for which the effect is to be estimated. It can be (optionally) a sequence for different values of the treatment variable.
      control_value: value of the treatment variable that denotes its absence (usually 0)
      target_units: The units for which the treatment effect should be estimated.
                   It can be a DataFrame that contains values of the effect_modifiers and effect will be estimated only for this new data.
                   It can also be a lambda function that can be used as an index for the data (pandas DataFrame) to select the required rows.
      """
      self._target_units = target_units
      self._treatment_value = treatment_value
      self._control_value = control_value
  
      X = None  # Effect modifiers
      if (
          self._effect_modifiers is not None
          and len(self._effect_modifiers) > 0
      ):
          X = self._effect_modifiers
  
      X_test = X
      if X is not None:
          if type(target_units) is pd.DataFrame:
              X_test = target_units
          elif callable(target_units):
              filtered_rows = data.where(target_units)
              boolean_criterion = np.array(
                  filtered_rows.notnull().iloc[:, 0]
              )
              X_test = X[boolean_criterion]
      # Changing shape to a list for a singleton value
      # Note that self._control_value is assumed to be a singleton value
      self._treatment_value = parse_state(self._treatment_value)
      est = self.effect(X_test)
      ate = np.mean(est, axis=0)  # one value per treatment value
  
      if len(ate) == 1:
          ate = ate[0]
  
      if self._confidence_intervals:
          self.effect_intervals = self.effect_interval(X_test)
      else:
          self.effect_intervals = None
  
      estimate = CausalEstimate(
          data=data,
          treatment_name=self._target_estimand.treatment_variable,
          outcome_name=self._target_estimand.outcome_variable,
          estimate=ate,
          control_value=control_value,
          treatment_value=treatment_value,
          target_estimand=self._target_estimand,
          realized_estimand_expr=self.symbolic_estimator,
          cate_estimates=est,
          effect_intervals=self.effect_intervals,
          _estimator_object=self.estimator,
      )
  
      estimate.add_estimator(self)
      return estimate
  
imports: import inspect
  from importlib import import_module
  from typing import Any, Callable, List, Optional, Protocol, Union
  from warnings import warn
  import numpy
  import pandas
  from numpy.distutils.misc_util import is_sequence
  from dowhy.causal_estimator import CausalEstimate, CausalEstimator
  from dowhy.causal_identifier import IdentifiedEstimand
  from dowhy.utils.api import parse_state
label_desc: Use image node_id 4 for calling the Econml obj's underlying member method code with example usage: obj.estimate_effect(data, treatment_value, control_value, target_units) and returns: estimate