code: def estimate(self, edp: EvaluationDataPage, **kwargs) -> CpeEstimate:
      result = self._ope_estimator.evaluate(
          OPEstimatorAdapter.edp_to_contextual_bandit_log(edp), **kwargs
      )
      assert isinstance(result, EstimatorResult)
      logging.info(
          f"Got estimator result {result}, turning into cpe estimate"
      )
      return OPEstimatorAdapter.estimator_result_to_cpe_estimate(result)
  
imports: import logging
  import torch
  from reagent.evaluation.cpe import bootstrapped_std_error_of_mean, CpeEstimate, CpeEstimateSet
  from reagent.evaluation.evaluation_data_page import EvaluationDataPage
  from reagent.evaluation.evaluator import Evaluator
  from reagent.evaluation.weighted_sequential_doubly_robust_estimator import WeightedSequentialDoublyRobustEstimator
  from reagent.ope.estimators.contextual_bandits_estimators import BanditsEstimatorInput, DMEstimator, DoublyRobustEstimator, IPSEstimator, LogSample, ModelOutputs
  from reagent.ope.estimators.estimator import Estimator, EstimatorResult, EstimatorResults
  from reagent.ope.estimators.sequential_estimators import Action, ActionDistribution, DoublyRobustEstimator, MAGICEstimator, RLEstimator, RLEstimatorInput, RLPolicy, State, Transition, ValueFunction
  from reagent.ope.estimators.types import ActionSpace
label_desc: Use image node_id 4 for calling the OPEstimatorAdapter obj's underlying member method code with example usage: obj.estimate(edp) and returns: OPEstimatorAdapter