code: def estimate(self, edp: EvaluationDataPage) -> CpeEstimate:
      estimator_results = self.seq_ope_estimator.evaluate(
          SequentialOPEstimatorAdapter.edp_to_rl_input(
              edp, self.gamma, self._device
          )
      )
      assert isinstance(estimator_results, EstimatorResults)
      return SequentialOPEstimatorAdapter.estimator_results_to_cpe_estimate(
          estimator_results
      )
  
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 SequentialOPEstimatorAdapter obj's underlying member method code with example usage: obj.estimate(edp) and returns: SequentialOPEstimatorAdapter