code: def score_cpe(self, metric_name, edp: EvaluationDataPage):
      (
          direct_method,
          inverse_propensity,
          doubly_robust,
      ) = self.doubly_robust_estimator.estimate(edp)
      sequential_doubly_robust = (
          self.sequential_doubly_robust_estimator.estimate(edp)
      )
      weighted_doubly_robust = (
          self.weighted_sequential_doubly_robust_estimator.estimate(
              edp,
              num_j_steps=1,
              whether_self_normalize_importance_weights=True,
          )
      )
      magic = self.weighted_sequential_doubly_robust_estimator.estimate(
          edp,
          num_j_steps=Evaluator.NUM_J_STEPS_FOR_MAGIC_ESTIMATOR,
          whether_self_normalize_importance_weights=True,
      )
      return CpeEstimateSet(
          direct_method=direct_method,
          inverse_propensity=inverse_propensity,
          doubly_robust=doubly_robust,
          sequential_doubly_robust=sequential_doubly_robust,
          weighted_doubly_robust=weighted_doubly_robust,
          magic=magic,
      )
  
file_path: ReAgent/reagent/evaluation/evaluator.py
imports: import logging
  from collections import Counter
  from typing import Dict, List, Optional
  import torch
  import torch.nn.functional
  from reagent.core.tracker import observable
  from reagent.evaluation.cpe import CpeDetails, CpeEstimateSet
  from reagent.evaluation.doubly_robust_estimator import DoublyRobustEstimator
  from reagent.evaluation.evaluation_data_page import EvaluationDataPage
  from reagent.evaluation.sequential_doubly_robust_estimator import SequentialDoublyRobustEstimator
  from reagent.evaluation.weighted_sequential_doubly_robust_estimator import WeightedSequentialDoublyRobustEstimator
label_desc: Use image node_id 3 for calling the Evaluator obj's underlying member method code with example usage: obj.score_cpe(metric_name, edp) and returns: CpeEstimateSet